【发布时间】:2018-10-22 16:49:19
【问题描述】:
假设我们在某个 Models.py 文件中有以下代码:
class Person(db.Model):
__tablename__ = 'Persons'
ID = db.Column(db.Integer, primary_key=True, nullable=False)
Name = db.Column(db.String(255), nullable=False)
class House(db.Model):
__tablename__ = 'Houses'
ID = db.Column(db.Integer,primary_key=True,nullable=False)
OwnerID = db.Column(db.Integer, nullable=False)
TenantID = db.Column(db.Integer, nullable=False)
__table_args__ = (
db.ForeignKeyConstraint(
['OwnerID'],
['Persons.ID'],
),
db.ForeignKeyConstraint(
['TenantID'],
['Persons.ID'],
),
)
OwnerBackref = db.relationship('Person', backref='OwnerBackref', lazy=True, foreign_keys=[OwnerID])
TenantBackref = db.relationship('Person', backref='TenantBackref', lazy=True, foreign_keys=[TenantID])
并且我们希望使用自动映射库来反映这些模型,因此我们将这段代码放在另一个名为 Database.py 的模块中:
Base = automap_base()
engine = create_engine(DB_CONNECTION, pool_size=10, max_overflow=20)
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
Base.prepare(engine, reflect=True)
Person = Base.classes.Persons
House = Base.classes.Houses
现在,当我在其他模块中导入 House 时,我希望能够这样做:
h = db_session.query(House).first()
print(h.OwnerBackref.Name)
print(h.TenantBackref.Name)
但是我收到一个错误,说这 2 个反向引用不存在,而是将一个名为“persons”的字段添加到我的 House 对象中,但这里的问题是它仅链接 1 个(租户或所有者)。我的意思是,如果我这样做:
print(h.persons.Name)
它只会为相应的租户或所有者打印名称,让我无法访问另一个租户的信息。 (请注意,我为 backrefs 设置的名称无处可寻)
那么,我的问题是如何使用我创建的反向引用来访问我想要的信息?我在这里做错了吗?
【问题讨论】:
标签: python python-3.x orm sqlalchemy