让pylint识别pylons/SA模型中的继承方法有问题

11 投票
1 回答
2221 浏览
提问于 2025-04-16 06:20

我有一个使用 SqlAlchemy 声明式模型的 Pylons 应用。为了让代码看起来更整洁,我在 SA Base 上添加了一个 .query,并让我的所有模型都继承这个。

所以在我的 app.model.meta 文件里,我有

Base = declarative_base()
metadata = Base.metadata
Session = scoped_session(sessionmaker())

Base.query = Session.query_property(Query)

我想把这个继承到 app.model.mymodel,并把它声明为 meta.Base 的子类。这样我就可以像这样写查询

mymodel.query.filter(mymodel.id == 3).all()

问题是,pylint 并没有把 .query 视为我模型的有效属性。

E:102:JobCounter.reset_count: Class 'JobCounter' has no 'query' member

显然,这个错误到处都是,因为它在任何模型执行任何查询时都会出现。我不想直接跳过这个错误,因为它可能会在将来指出一些非 ORM 类的问题,但我一定是漏掉了什么,让 pylint 无法接受这个。

有没有什么提示?

1 个回答

8

我找到的最好办法就是给pylint传一个要忽略检查的类的列表。这样它还是会对这些类进行其他检查,只是你需要在某个地方维护这个列表:

pylint --ignored-classes=MyModel1,MyModel2 myfile.py

我知道这不是最理想的解决方案,但sqlalchemy设置模型的方式让pylint感到困惑。至少这样你仍然可以对非ORM类进行检查。

撰写回答