2015-12-29 48 views
0

我有一個模型與外鍵到另一個模型。我查詢第一個模型,並且想要訪問與之相關的模型。在Django中,我可以從外鍵訪問模型。我如何在SQLAlchemy中執行此操作?訪問與外鍵鏈接的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 
+3

我想你應該閱讀有關backref和關係[文件]父子( http://docs.sqlalchemy.org/en/latest/orm/backref.html) – pazitos10

回答

1

在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是外鍵配對UserGroupUser.group是關係(和Group.users是在另一個方向的關係)。通常你設置和讀取關係,而不是外鍵。

+0

感謝您的好解釋! – asyndrige

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