'Marshmallow' 对象没有属性 'ModelSchema'
'Marshmallow' object has no attribute 'ModelSchema'
文档中的一切看起来都很好,但是当我 运行 应用程序时它仍然给我这个错误:
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)
我讨厌它发生,但我在发布后立即得到了答案...
只安装了 flask-marshmallow,但是
pipenv install marshmallow-sqlalchemy
需要添加才能与 SQLAlchemy 一起使用。整个代码保持不变。
也许它会对某人有所帮助...
现在我遇到了一个不同的问题,但那是另一回事了。
我安装了 marshmallow-sqlalchemy,但我仍然得到 'Marshmallow' 对象没有属性 'ModelSchema'。对我来说,以下解决了问题。
from marshmallow_sqlalchemy import ModelSchema
class UserSchema(ModelSchema):
class Meta:
model = User
我为此苦苦挣扎了 2 天。没有任何效果,最后我将 marshmallow-sqlalchemy
的版本从 0.23.0
更改为 0.22.3
pip uninstall marshmallow-sqlalchemy
pip install marshmallow-sqlalchemy==0.22.3
错误消失了。
我希望没有其他人像我一样浪费他们的时间。
使用 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()
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
来自https://github.com/marshmallow-code/flask-marshmallow/issues/56:
See
https://github.com/marshmallow-code/flask-marshmallow/blob/dev/CHANGELOG.rst#0120-2020-04-26
. It is recommended that you use the newer SQLAlchemySchema rather
than ModelSchema.
重大更改:ma.ModelSchema
和 ma.TableSchema
已删除,因为上游已弃用它们。
于 2020 年更改为 Schema
而不是 ModelSchema
随着 Flask-Marshmallow 0.12.0 (2020-04-26) 的发布,ma.ModelSchema
被弃用了。
您应该切换到 ma.SQLAlchemySchema
或 ma.SQLAlchemyAutoSchema
。
在 https://flask-marshmallow.readthedocs.io/en/latest/changelog.html#id2
查看更多
发布新版本时,显示此错误。
重大更改: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
祝你好运
太棒了!它在较新版本中已被弃用。
class UserSchema(ma.ModelSchema):
class Meta:
model = User
将其更改为
class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model=User
load_instance=True
现在应该可以正常使用了!!
保持阅读文档的良好习惯。适合您的解决方案可以是:
class UserSchema(ma.ModelSchema):
class Meta:
model = User
就我而言,我使用的是版本 14。
所以随着时间的推移,它们可能会改变。为此,请参阅文档:
https://flask-marshmallow.readthedocs.io/en/latest/
文档中的一切看起来都很好,但是当我 运行 应用程序时它仍然给我这个错误:
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)
我讨厌它发生,但我在发布后立即得到了答案...
只安装了 flask-marshmallow,但是
pipenv install marshmallow-sqlalchemy
需要添加才能与 SQLAlchemy 一起使用。整个代码保持不变。
也许它会对某人有所帮助... 现在我遇到了一个不同的问题,但那是另一回事了。
我安装了 marshmallow-sqlalchemy,但我仍然得到 'Marshmallow' 对象没有属性 'ModelSchema'。对我来说,以下解决了问题。
from marshmallow_sqlalchemy import ModelSchema
class UserSchema(ModelSchema):
class Meta:
model = User
我为此苦苦挣扎了 2 天。没有任何效果,最后我将 marshmallow-sqlalchemy
的版本从 0.23.0
更改为 0.22.3
pip uninstall marshmallow-sqlalchemy
pip install marshmallow-sqlalchemy==0.22.3
错误消失了。 我希望没有其他人像我一样浪费他们的时间。
使用 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()
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
来自https://github.com/marshmallow-code/flask-marshmallow/issues/56:
See https://github.com/marshmallow-code/flask-marshmallow/blob/dev/CHANGELOG.rst#0120-2020-04-26 . It is recommended that you use the newer SQLAlchemySchema rather than ModelSchema.
重大更改:ma.ModelSchema
和 ma.TableSchema
已删除,因为上游已弃用它们。
于 2020 年更改为 Schema
而不是 ModelSchema
随着 Flask-Marshmallow 0.12.0 (2020-04-26) 的发布,ma.ModelSchema
被弃用了。
您应该切换到 ma.SQLAlchemySchema
或 ma.SQLAlchemyAutoSchema
。
在 https://flask-marshmallow.readthedocs.io/en/latest/changelog.html#id2
查看更多发布新版本时,显示此错误。 重大更改: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
祝你好运
太棒了!它在较新版本中已被弃用。
class UserSchema(ma.ModelSchema):
class Meta:
model = User
将其更改为
class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model=User
load_instance=True
现在应该可以正常使用了!!
保持阅读文档的良好习惯。适合您的解决方案可以是:
class UserSchema(ma.ModelSchema):
class Meta:
model = User
就我而言,我使用的是版本 14。 所以随着时间的推移,它们可能会改变。为此,请参阅文档: https://flask-marshmallow.readthedocs.io/en/latest/