Flask_marshmallow,SQLAlchemy。 “棉花糖”对象没有属性“ ModelSchema”

时间:2019-09-18 03:26:35

标签: python flask sqlalchemy marshmallow

我是新来的,正在寻求帮助。文档一切正常,但仍然给我一个错误...

当我运行应用程序时:

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

所有导入的内容,数据库均已提交。 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)

11 个答案:

答案 0 :(得分:14)

Conf.py

from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow

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

#烧瓶棉花糖<0.12.0

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

#flask-marshmallow> = 0.12.0(推荐)

from conf import ma
class UserSchema(ma.SQLAlchemyAutoSchema):
      class Meta:
            model = User
            load_instance = True

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

from marshmallow_sqlalchemy import ModelSchema
class UserSchema(ModelSchema):
      class Meta:
            model = User
            sql_session = db.session

答案 1 :(得分:5)

我讨厌它发生,但是发布后我立刻得到了答案...

仅安装了烧瓶棉花糖,但

pipenv install marshmallow-sqlalchemy

需要添加才能与SQLAlchemy一起使用。整个代码保持不变。

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

答案 2 :(得分:4)

来自https://github.com/marshmallow-code/flask-marshmallow/issues/56

请参阅 https://github.com/marshmallow-code/flask-marshmallow/blob/dev/CHANGELOG.rst#0120-2020-04-26 。建议您使用较新的SQLAlchemySchema而不是 而不是ModelSchema。

重大更改ma.ModelSchemama.TableSchema已删除,因为它们已在上游弃用。

答案 3 :(得分:1)

使用SQLAlchemySchema或SQLAlchemyAutoSchema从模型中生成棉花糖模式。 https://flask-marshmallow.readthedocs.io/en/latest/

from flask_marshmallow import Marshmallow
from .models import Author

ma = Marshmallow()

class AuthorSchema(ma.SQLAlchemySchema):
    class Meta:
        model = Author

    id = ma.auto_field()
    name = ma.auto_field()
    books = ma.auto_field()

答案 4 :(得分:1)

在2020年。它更改为Schema,而不是ModelSchema

查看官方发行说明https://flask-marshmallow.readthedocs.io/en/latest/

答案 5 :(得分:0)

我安装了marshmallow-sqlalchemy,但是我仍然得到“ Marshmallow”对象没有属性“ ModelSchema”。对我来说,以下解决了这个问题。

from marshmallow_sqlalchemy import ModelSchema

class UserSchema(ModelSchema):
    class Meta:
        model = User

答案 6 :(得分:0)

随着Flask-Marshmallow 0.12.0(2020-04-26)的发布,ma.ModelSchema被淘汰。 您应该切换到ma.SQLAlchemySchemama.SQLAlchemyAutoSchema

https://flask-marshmallow.readthedocs.io/en/latest/changelog.html#id2上查看更多信息

答案 7 :(得分:0)

发布新版本时,显示此错误。 重大变化:ma.ModelSchema和ma.TableSchema被删除,因为它们已在上游弃用。

请卸载当前的软件包,并使用此版本进行安装。

Click==7.0
Flask==1.1.1
Flask-Cors==3.0.8
Flask-Login==0.5.0
flask-marshmallow==0.9.0
Flask-SQLAlchemy==2.4.1
Flask-WTF==0.14.3
itsdangerous==1.1.0
Jinja2==2.11.1
MarkupSafe==1.1.1
marshmallow==2.20.5
marshmallow-sqlalchemy==0.18.0
six==1.14.0
SQLAlchemy==1.3.13
Werkzeug==1.0.0
WTForms==2.2.1

祝你好运

答案 8 :(得分:0)

酷!在较新的版本中已弃用。

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

更改为

class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
    model=User
    load_instance=True

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

答案 9 :(得分:0)

在阅读文档时保持良好的习惯。您的解决方案可以是这样的:

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

就我而言,我有 14 版。 所以随着时间的推移,它们可能会改变。为此,请参阅文档: https://flask-marshmallow.readthedocs.io/en/latest/

答案 10 :(得分:-1)

我为此苦了2天。什么都没用,最后我将marshmallow-sqlalchemy的版本从0.23.0修改为0.22.3

pip uninstall marshmallow-sqlalchemy
pip install marshmallow-sqlalchemy==0.22.3

,错误消失。 我希望没有其他人像我一样浪费时间。