是否将连接表中的数据作为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()