【发布时间】:2021-08-31 23:11:09
【问题描述】:
这很好用
protocols = db.session.query(Protocol.id, Protocol.customer_id).all()
结果
[(1, 1), (2, 1)]
如果我尝试在查询中包含关系列 (Protokol.zakaznik.objednatel) 而不是 Protocol.customer_id,它将返回:AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Protocol.zakaznik has an attribute 'objednatel'。
protocols = db.session.query(Protocol.id, Protocol.zakaznik.objednatel).all()
如果我遍历协议,则关系会很好
protocols = db.session.query(Protocol).all()
for protocol in protocols:
print(protocol.zakaznik.objednatel)
print(protocol.zakaznik.id)
那么在查询中使用关系有什么问题呢?是否可以返回[(1, CustomerObjednatel1), (2, CustomerObjednatel1)]?我当然可以做连接查询,效果很好。我认为使用关系会更短。
models.py
class Customer(db.Model):
id = db.Column(db.Integer, primary_key=True)
objednatel = db.Column(db.String(120), unique=True, nullable=False)
protocols = db.relationship('Protocol', back_populates='zakaznik')
class Protocol(db.Model):
id = db.Column(db.Integer, primary_key=True)
customer_id = db.Column(db.Integer, db.ForeignKey('customer.id'), nullable=False)
zakaznik = db.relationship('Customer', back_populates='protocols')
【问题讨论】:
标签: python sqlalchemy