我使用Flask,SqlAlchemy和棉花糖通过Python构建REST API。
我用pipenv安装flask flask-sqlalchemy flask-marshmallow和棉花糖-sqlalchemy,一切正常。
以下是我的依赖版本:
click==7.1.2
Flask==1.1.2
flask-marshmallow==0.12.0
Flask-SQLAlchemy==2.4.3
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
marshmallow==2.21.0
marshmallow-sqlalchemy==0.19.0
six==1.15.0
SQLAlchemy==1.3.17
Werkzeug==1.0.1
现在我运行此代码以运行没有任何方法的基本服务器
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import os
# Init app
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
# Database
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# Init db
db = SQLAlchemy(app)
# Init ma
ma = Marshmallow(app) # This is where the error appears
# Run Server
if __name__ == '__main__':
app.run(debug=True)
运行此代码时,出现以下异常:
File "/Users/pro/PycharmProjects/EventPlannerAPI/app.py", line 15, in <module>
ma = Marshmallow(app)
File "/Users/pro/.local/share/virtualenvs/EventPlannerAPI-OoqXq5gv/lib/python3.7/site-packages/flask_marshmallow/__init__.py", line 104, in __init__
self.init_app(app)
File "/Users/pro/.local/share/virtualenvs/EventPlannerAPI-OoqXq5gv/lib/python3.7/site-packages/flask_marshmallow/__init__.py", line 116, in init_app
self.SQLAlchemySchema.OPTIONS_CLASS.session = db.session
AttributeError: 'NoneType' object has no attribute 'OPTIONS_CLASS'
我正在跟踪(1-2岁)的教程,所以我不知道为什么它不起作用,特别是因为在类似的项目中,一切都很好。
答案 0 :(得分:1)
我遇到了同样的问题。我使用的是python 2.7虚拟环境,并且在安装marshmallow-sqlalchemy时,默认情况下安装的版本为0.19.0。在修复过程中,我将其更改为Python 3,然后根据依赖性将版本更改为0.23.0。现在一切正常。 0.19.0版本引起了问题。但是我不确定是否还需要更改python版本。
答案 1 :(得分:0)
这是不同版本之间的兼容性问题。应该尽快修复。