如何使用flask_sqlalchemy正确注释类型?

问题描述 投票:0回答:2

我有一个使用 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

应用程序.py

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

模型.py

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)
python flask sqlalchemy mypy python-typing
2个回答
3
投票

你需要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 声明性模型量身定制的。


-2
投票

既然你在使用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
© www.soinside.com 2019 - 2024. All rights reserved.