访问与外键链接的SQLAlchemy模型

时间:2015-12-29 14:25:41

标签: python flask sqlalchemy

我有一个带有外键的模型到另一个模型。我查询第一个模型,并希望访问与之相关的模型。在Django中,我可以从外键访问模型。我如何在SQLAlchemy中执行此操作?

class Model(Base):
    field_id = Column(Integer, ForeignKey('Model2.id'))

class Model2(Base):
    id = Column(Integer)
    needed_field = Column(Integer)
models = Model.query.all()
return render to template('templ.html', models=models)

Django的工作原理如下:

models = Model.objects.all()
model.field_id.needed_field # loop in template

2 个答案:

答案 0 :(得分:5)

在Django中,定义外键定义列以及与其他模型的关系。在SQLAlchemy中,您需要手动定义它们。请参阅有关defining relationships的文档。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

class Group(db.Model):
    id = db.Column(db.Integer, primary_key=True)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    group_id = db.Column(db.ForeignKey(Group.id))
    group = db.relationship(Group, backref='users')

db.create_all()
db.session.add(User(group=Group()))
db.session.commit()
u = User.query.get(1)
print(u.group)

User.group_id是将UserGroup配对的外键。 User.group是关系(Group.users是另一个方向的关系)。通常你设置和读取关系,而不是外键。

答案 1 :(得分:0)

以下示例可以帮助您

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child", back_populates="parent")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parent = relationship("Parent", back_populates="children")

现在您可以从parent_obj.children

访问父子

有关详细信息http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#many-to-one