我有一个带有外键的模型到另一个模型。我查询第一个模型,并希望访问与之相关的模型。在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
答案 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
是将User
与Group
配对的外键。 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