文章内容
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='[email protected]'), Address(email='[email protected]')])
user2 = User(name='User 2', addresses=[Address(email='[email protected]'), Address(email='[email protected]')])
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 替换为你实际的表名,而 column1 和 column2 替换为要去重的列名。
同时如果我们希望在查询中使用更复杂的条件,并且同时要去重,可以在使用DISTINCT的同时使用 WHERE 子句:
-- 在满足特定条件的情况下,对 name 列进行去重 SELECT DISTINCT name FROM users WHERE your_condition;
在上述查询中,将 your_condition 替换为实际的条件,以便根据需求进行过滤和去重。
其它相关推荐:
评论列表