文章内容

2023/11/18 1:22:33,作 者: 黄兵

SQLAlchemy 查询去重

在SQLAlchemy中,要执行查询并去重,可以使用distinct方法或distinct()函数。

以下是使用distinct方法的示例:

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import declarative_base, Session, relationship

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    addresses = relationship('Address', back_populates='user')

class Address(Base):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    email = Column(String)
    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship('User', back_populates='addresses')

# 创建数据库连接
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)

# 创建会话
session = Session(engine)

# 添加测试数据
user1 = User(name='User 1', addresses=[Address(email='user1@example.com'), Address(email='user1@example.com')])
user2 = User(name='User 2', addresses=[Address(email='user2@example.com'), Address(email='user2@example.com')])
session.add_all([user1, user2])
session.commit()

# 执行查询并去重
distinct_emails = session.query(Address.email).distinct().all()

print(distinct_emails)

在上面的示例中,distinct()方法被用于去重查询结果中的电子邮件地址。

如果我们在使用group_by等其他查询方法,也可以考虑在查询中使用distinct来进行去重。


如果我们使用 MySQL 查询重复数据,应该怎么查询呢?

在MySQL中,也可以使用DISTINCT关键字来执行查询并去重结果。下面是一个简单的示例:

-- 假设你有一个名为 `users` 的表,包含 `id` 和 `name` 列
SELECT DISTINCT name FROM users;

上述查询将返回去重后的所有不同的 name 列的值。

如果我们需要在多个列上执行去重,可以使用多个列名:

-- 在两列上执行去重
SELECT DISTINCT column1, column2 FROM your_table;

your_table 替换为你实际的表名,而 column1column2 替换为要去重的列名。

同时如果我们希望在查询中使用更复杂的条件,并且同时要去重,可以在使用DISTINCT的同时使用 WHERE 子句:

-- 在满足特定条件的情况下,对 name 列进行去重
SELECT DISTINCT name FROM users WHERE your_condition;

在上述查询中,将 your_condition 替换为实际的条件,以便根据需求进行过滤和去重。


其它相关推荐:

1、MySQL查询表中重复字段和重复的次数

2、SQLAlchemy 插入种子数据或默认数据方法总结

3、SQLAlchemy 多字段唯一索引

4、SQLAlcehmy count() 与 limit() 查询

5、Flask-SQLAlchemy get_or_404

分享到:

发表评论

评论列表