繁体   English   中英

Flask SQLAlchemy 查询 model 不返回外键

[英]Flask SQLAlchemy querying a model not returning the Foreign Key

我有以下课程:

class CompanyModel(db.Model):
    __tablename__ = "tb_company"
    __table_args__ = {"schema": "public"}

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))


class CustomerModel(db.Model):
    __tablename__ = "tb_customer"
    __table_args__ = {"schema": "public"}

    id = db.Column(db.Integer, primary_key=True)
    company_id = db.Column(db.Integer,
                           db.ForeignKey(CompanyModel.id),
                           nullable=False)

    company = db.relationship("CompanyModel",
                              foreign_keys=company_id,
                              backref=db.backref("company",
                                                 uselist=False))

但是,当我查询它时,外键不会显示:

{
    "id": 79
}

我什至尝试在查询中手动设置其属性,但无论如何都行不通:

@classmethod
def find_by_id(cls, customer_id: int) -> "CustomerModel":
    customer = cls.query.filter_by(id=customer_id).first()
    setattr(customer, "company_id", customer.company.id)
    return customer

我已经设法解决了。 刚刚将该字段添加到 Flask-Marshmallow 的自动架构中:

class CustomerSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = CustomerModel
        load_instance = True

    id = ma.auto_field(dump_only=True)
    company_id = ma.auto_field(dump_only=True)

但是,我仍然有一个问题......我想使用“CompanyModel”中的另一个字段作为查询结果,例如“名称”列。 但是,当我尝试手动设置它时,出现以下错误:

ValueError: invalid literal for int() with base 10: 'Company Name'

我该怎么做?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM