我使用连接到 PostgresSQL 数据库的 Flask SQLAlchemy 在 Python 中定义了两个表 Entry 和 Group:
class Entry (db.Model):
__tablename__ = "entry"
id = db.Column('id', db.Integer, primary_key = True)
group_title = db.Column('group_title', db.Unicode, db.ForeignKey('group.group_title'))
url = db.Column('url', db.Unicode)
next_entry_id = db.Column('next_entry_id', db.Integer, db.ForeignKey('entry.id'))
entry = db.relationship('Entry', foreign_keys=next_entry_id)
group = db.relationship('Group', foreign_keys=group_title)
class Group (db.Model):
__tablename__ = "group"
group_title = db.Column('group_title', db.Unicode, primary_key = True)
group_start_id = db.Column('group_start_id', db.Integer)
#etc.
我正在尝试使用 Entry.id
和 Group.group_start_id
作为公共(public)字段将两个表与自然连接结合起来。
我已经能够查询单个表中的所有记录。但我想通过外键 ID 连接表,将与 Group.group_start_id
和 Group.group_title
相关的记录提供给特定的 Entry
记录。
我在使用 Flask-SQLAlchemy 查询语法或过程时遇到问题
我尝试了几种方法(仅举几例):
db.session.query(Group, Entry.id).all()
db.session.query(Entry, Group).all()
db.session.query.join(Group).first()
db.session.query(Entry, Group).join(Group)
他们都返回了一个比预期更大的元组列表,并且不包含我想要的内容。
我正在寻找以下结果:
(Entry.id, group_title, Group.group_start_id, Entry.url)
如有任何帮助,我将不胜感激。
最佳答案
我使用以下查询对组和条目表执行自然连接:
db.session.query(Entry, Group).join(Group).filter(Group.group_start_id == Entry.id).order_by(Group.order.asc())
我在查询中使用 .join
函数执行此操作,该函数允许我将 Group 表连接到 Entry 表。然后,我使用 Group.group_start_id
过滤查询结果,它是 Group 表中的外键,它引用 Entry.id
中的主键条目表。
关于python - 如何使用 SQLAlchemy 和 Flask 对两个表执行自然连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37556373/