我有一个使用 SQLAlchemy /
flask_sqlalchemy
的工作 Flask 应用程序。为了给您一个印象,我创建了一个超级精简版本(apps.py
和models.py
)。该应用程序有效。问题是 mypy
抱怨 db.Model
中使用 models.py
:
error: Name 'db.Model' is not defined
原因很可能是在调用
db.init_app(app)
时创建的。我怎样才能解决这个问题?还有比忽略更好的选择吗?
# type: ignore
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app():
app = Flask(__name__, template_folder="templates")
db.init_app(app)
return app
from app import db
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.String, primary_key=True, nullable=False)
username = db.Column(db.String, unique=True)
你需要https://pypi.org/project/sqlalchemy-stubs/
引自https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/basic_use.html
将 MyPy 与 SQLAlchemy 模型结合使用
如果您使用 Python 的 PEP 484 静态类型检查器, MyPy 插件包含在 SQLAlchemy 的类型存根中。 该插件是针对 SQLAlchemy 声明性模型量身定制的。
既然你在使用flask_sqlalchemy,你试过这个吗
模型.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.String, primary_key=True, nullable=False)
username = db.Column(db.String, unique=True)
编辑 这就是我的 app.py 的样子
from .settings import ProdConfig
def create_app(config_object=ProdConfig):
app = Flask(__name__)
app.config.from_object(config_object)
register_blueprints(app)
return app