是否将连接表中的数据作为SQLAlchemy中的当前(可读)列导入?
我有这个模式:是否将连接表中的数据作为SQLAlchemy中的当前(可读)列导入?,sqlalchemy,Sqlalchemy,我有这个模式: class Company(db.Model): __tablename__ = 'companies' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(250), nullable=True, default=None) domain = db.Column(db.String(
class Company(db.Model):
__tablename__ = 'companies'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(250), nullable=True, default=None)
domain = db.Column(db.String(250), nullable=True, default=None)
organization_id = db.Column(db.Integer, db.ForeignKey('organizations.id'), nullable=False)
class Contact(db.Model):
__tablename__ = 'contacts'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(250), nullable=True, default=None)
email = db.Column(db.String(250), nullable=False)
company_id = db.Column(db.Integer, db.ForeignKey('companies.id'), nullable=True, default=None)
company = relationship('Company')
organization_id = db.Column({Import Company.organization_id as eager})
最后一行当然是垃圾,但它是为了表达这个想法:
我希望在Contact中提供值“organization\u id”,即使它不在表“contacts”中,但既然它在“Companys”中存在,有没有办法让SQLAlchemy通过联接从“Companys”加载值,并将其作为只读值影响到“contacts”
这样,当我搜索联系人时,例如:
contact = Contact.query.filter(Contact.email = 'test@test.com').first()
print(contact.organization_id) # => 1
谢谢。您可以使用装饰器在类上定义属性:
class Contact(db.Model):
...
@hybrid_property
def organization_id(self):
return self.company.organization_id if self.company else None
使用
contact.organization\u id
将使用外键关系加载company
。是否有方法要求SqlAlchemy仅从contact加载该organization\u id
,而不加载整个contact.
部分?(急切地?)是的,您可以自己编写查询,而不是使用关系:return session.query(Company.organization\u id)。filter\u by(id=self.Company\u id)。first()