python - 如何使用 SQLAlchemy 和 Flask 对两个表执行自然连接?

标签 python database postgresql flask flask-sqlalchemy

我使用连接到 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.idGroup.group_start_id 作为公共(public)字段将两个表与自然连接结合起来。

我已经能够查询单个表中的所有记录。但我想通过外键 ID 连接表,将与 Group.group_start_idGroup.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/

相关文章:

python - 在 matplotlib 中绘制 Needleman-Wunsch 成对序列比对的得分矩阵

python - 检查文件名是否包含字符串 Python

python - 在R,G,B平面中有效替换像素值python-openCV

database - Golang mgo 查找

sql - 原始 SQL 与 ORM 如果我已经知道 SQL

python - TensorFlow 模型恢复 ValueError - 至少两个变量具有相同的名称

database - 将多个在线销售点数据保存到单个销售点的最佳方法

Python Sqlite3 : Create a schema without having to use a second database

python - PGadmin未加载

postgresql - Postgres 9.6 更新 jsonb 列以添加具有查询值的新属性