要从查询构建器中提取唯一关系,您可以使用distinct()
方法
以下是一个使用SQLAlchemy查询构建器的例子:
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True)
title = Column(String)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", back_populates="posts")
User.posts = relationship("Post", order_by=Post.id, back_populates="user")
# 创建数据库引擎和会话
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 添加一些示例数据
user1 = User(name="Alice")
user2 = User(name="Bob")
post1 = Post(title="Post 1", user=user1)
post2 = Post(title="Post 2", user=user1)
post3 = Post(title="Post 3", user=user2)
session.add_all([user1, user2, post1, post2, post3])
session.commit()
# 提取含有唯一用户的帖子
unique_posts = session.query(Post).join(User).distinct(User.name).all()
# 输出结果
for post in unique_posts:
print(f"{post.title} by {post.user.name}")
在这个例子中,我们首先创建了一个具有用户和帖子关系的简单数据库。然后,我们添加了一些示例数据。最后,我们使用distinct()
方法提取与不同用户关联的帖子。
领取专属 10元无门槛券
手把手带您无忧上云