PyCharm 警告 SQLAlchemy 用户模型的意外参数

PyCharm warns about unexpected arguments for SQLAlchemy User model

我在 PyCharm 中使用 Flask-SQLAlchemy。当我尝试通过将关键字参数传递给模型来创建 User 模型的实例时,PyCharm 会突出显示带有 "Unexpected argument(s)" 警告的参数。当我创建其他模型的实例时,我没有收到此警告。为什么我的 User 模型会出现此错误?

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, unique=True, nullable=False)

new_user = User(username="test")

在上面的示例中,username="test" 被突出显示为警告。

This is a bug in PyCharm,不是你的代码。 PyCharm 在使用 mixin 时无法将列名识别为参数。您可以通过单击问题标题旁边的竖起大拇指按钮来表达您对该问题的兴趣。在那之前,除了禁用检查或忽略突出显示之外,您无法解决此问题。

如果您想不费吹灰之力就解决问题,可以在 python.

的较新版本上使用类型提示

定义 class 时,只需将类型提示直接放入声明中即可:

class User(db.Model, UserMixin):
    id: db.Column = db.Column(db.Integer, primary_key=True)
    username: db.Column = db.Column(db.String, unique=True, nullable=False)

如果你对所有表都这样做,它确实有点冗长,但它对所有 linters 也将完全起作用,而不仅仅是 PyCharm。

另一种解决这个恼人问题的方法是在行中添加注释 # type: ignore,这会删除 Pycharm 对该行的类型检查并且看起来更漂亮:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, unique=True, nullable=False)

new_user = User(username="test")  # type: ignore