Flask sqlalchemy棉花糖嵌套模式不起作用

Flask sqlalchemy棉花糖嵌套模式不起作用,flask,flask-sqlalchemy,marshmallow,Flask,Flask Sqlalchemy,Marshmallow,基本上,我想做的是,加入两个表“users”和“company”,并获取用户及其相关的公司详细信息 这是用户模型: class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) firstname = db.Column(db.String(10), nullable=False) lastname = db.Column(db.Strin

基本上,我想做的是,加入两个表“users”和“company”,并获取用户及其相关的公司详细信息

这是用户模型:

class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
firstname = db.Column(db.String(10), nullable=False)
lastname = db.Column(db.String(25), nullable=False)
username = db.Column(db.String(250), nullable=False)
email = db.Column(db.String(100), nullable=False)
password = db.Column(db.String(250), nullable=False)
isPasswordReset = db.Column(db.Boolean, nullable=False)
companyId = db.Column(db.Integer, db.ForeignKey(
    'company.id'), nullable=True)
这就是模式

class UserSchema(ma.Schema):
id = fields.Integer()
firstname = fields.String(required=True)
lastname = fields.String(required=True)
username = fields.String(required=True)
email = fields.String(required=True)
password = fields.String(required=True)
isPasswordReset = fields.Boolean(required=True)
companyId = fields.Integer()
company_name = fields.Nested(CompanySchema)
这是公司的模式:

class Company(db.Model):
__tablename__ = 'company'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
companyName = db.Column(db.String(100), nullable=True)
companyCode = db.Column(db.String(20), nullable=True)
companyTheme = db.Column(db.String(300), nullable=True)
这是公司模式:

class CompanySchema(ma.Schema):
id = fields.Integer()
companyName = fields.String(required=True)
companyCode = fields.String(required=True)
companyTheme = fields.String(required=True)
这是resource-user.py:

users_schema = UserSchema(many=True)
user_schema = UserSchema()

class UsersResource(Resource):
def get(self):
users = db.session.query(User.firstname, Company.companyName).join(
Company, User.companyId == Company.id).all()
if users:
results = users_schema.dump(users).data
return {'status': 'success', 'message': json.dumps(results, default=str)}, 200
这是我得到的输出:

{ “状态”:“成功”, “消息”:“[{\'firstname\':\'abc\',{\'firstname\':\'xyz\'}” }


只显示用户表,而不是公司表。我已经跟随了很多教程和东西好几个小时了。但仍然无法修复。我对烧瓶和炼金术还不熟悉。请问是否有人知道如何更正此问题?

首先,您需要在sqlalchemy模型中声明关系对象:

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    firstname = db.Column(db.String(10), nullable=False)
    lastname = db.Column(db.String(25), nullable=False)
    username = db.Column(db.String(250), nullable=False)
    email = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(250), nullable=False)
    isPasswordReset = db.Column(db.Boolean, nullable=False)
    companyId = db.Column(db.Integer, db.ForeignKey(
                         'company.id'), nullable=True)
    company = db.relationship("Company", backref="parents")  # <--
(或
返回用户\u schema.dump(用户)
用于测试目的)

毕竟,您应该得到如下输出:

{
id: 'something',
firstname: 'something',
lastname: 'something',
username: 'something',
email: 'something',
password: 'something',
isPasswordReset: 'something',
company : {
           id: 'something',
           companyName: 'something',
           companyCode: 'something',
           companyTheme: 'something',
          }
}

这是否满足您的需要?

首先,您需要在sqlalchemy模型中声明关系对象:

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    firstname = db.Column(db.String(10), nullable=False)
    lastname = db.Column(db.String(25), nullable=False)
    username = db.Column(db.String(250), nullable=False)
    email = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(250), nullable=False)
    isPasswordReset = db.Column(db.Boolean, nullable=False)
    companyId = db.Column(db.Integer, db.ForeignKey(
                         'company.id'), nullable=True)
    company = db.relationship("Company", backref="parents")  # <--
(或
返回用户\u schema.dump(用户)
用于测试目的)

毕竟,您应该得到如下输出:

{
id: 'something',
firstname: 'something',
lastname: 'something',
username: 'something',
email: 'something',
password: 'something',
isPasswordReset: 'something',
company : {
           id: 'something',
           companyName: 'something',
           companyCode: 'something',
           companyTheme: 'something',
          }
}

这能满足您的需要吗?

它起作用了。我已经尝试解决这个问题好几天了。非常感谢。)它成功了。我花了好几天的时间试图解决这个问题。非常感谢。:)