“棉花糖”对象没有属性“ModelSchema”

Art*_*haz 11 python sqlalchemy flask marshmallow

从文档中看一切都很好,但是当我运行应用程序时它仍然给我这个错误:

  File "main.py", line 21, in <module>
    class UserSchema(ma.ModelSchema):
AttributeError: 'Marshmallow' object has no attribute 'ModelSchema'
Run Code Online (Sandbox Code Playgroud)

一切都正确导入。DB 已提交。pipenv 和 venv 的行为是相同的。

我错过了什么吗?

from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy 
from flask_marshmallow import Marshmallow

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///marshmallowjson.db'

db  = SQLAlchemy(app)
ma = Marshmallow(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

class Item(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    item_name = db.Column(db.String(50))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', backref='items')

class UserSchema(ma.ModelSchema):
    class Meta:
        model = User 
        
class ItemSchema(ma.ModelSchema):
    class Meta:
        model = Item

@app.route('/')
def index():
    users = User.query.all()
    user_schema = UserSchema(many=True)
    output = user_schema.dump(users).data
    return jsonify({'user': output})

if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

小智 25

配置文件

from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow

db = SQLAlchemy(app)
ma = Marshmallow(app) 
Run Code Online (Sandbox Code Playgroud)

# 烧瓶棉花糖<0.12.0

class UserSchema(ma.ModelSchema):
      class Meta:
            model = User
Run Code Online (Sandbox Code Playgroud)

#flask-marshmallow>=0.12.0(推荐)

from conf import ma
class UserSchema(ma.SQLAlchemyAutoSchema):
      class Meta:
            model = User
            load_instance = True
Run Code Online (Sandbox Code Playgroud)

#flask-marshmallow>=0.12.0(不推荐)

from marshmallow_sqlalchemy import ModelSchema
class UserSchema(ModelSchema):
      class Meta:
            model = User
            sql_session = db.session
Run Code Online (Sandbox Code Playgroud)


Art*_*haz 16

我讨厌它发生时,但我在发布后立即得到了答案......

只安装了烧瓶棉花糖,但是

pipenv install marshmallow-sqlalchemy
Run Code Online (Sandbox Code Playgroud)

需要添加以使用 SQLAlchemy。整个代码保持不变。

也许它会帮助某人......现在我遇到了一个不同的问题,但那是另一个故事。

  • @GKV 请参阅 /sf/answers/4305066811/ 。ModelSchema 已从烧瓶棉花糖中删除。您应该迁移到 SQLAlchemySchema:https://flask-marshmallow.readthedocs.io/en/latest/changelog.html#changelog (3认同)

Pav*_*tty 7

凉爽的 !它在新版本中已被弃用。

class UserSchema(ma.ModelSchema):
class Meta:
    model = User 
Run Code Online (Sandbox Code Playgroud)

将其更改为

class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
    model=User
    load_instance=True
Run Code Online (Sandbox Code Playgroud)

现在应该可以正常工作了!