Pycharm SqlAlchemy 自动完成功能不起作用

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

我正在使用 SQLAlchemy 和 Pycharm,但 PyCharm 无法看到 SQLAlchemy 的自动完成功能的方法。

代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data.sqlite3'
db = SQLAlchemy(app)


class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(16), index=True, unique=True)

if __name__ == '__main__':
    db.create_all()
    app.run(debug=True)

例如,如果我想调用 User 类的 SQLAlchemy 方法,我必须手动输入完整的方法名称 User.query.filter_by(username='peter').first() Autocomplete example

如何让 SQLAlchemy 自动完成功能正常工作?

1)是的,项目已重新加载多次
2)是的,文件中的正确解释器 |设置 |项目
3) 是的,PyCharm 未处于省电模式
4)是的,我有专业版。

python autocomplete sqlalchemy pycharm flask-sqlalchemy
4个回答
16
投票

PyCharm(或任何其他 IDE)无法找到大多数方法(

query()
add()
commit()
等),因为它们未在
flask_sqlalchemy.SQLAlchemy
类中定义。 SQLAlchemy 方法在初始化期间动态添加到
flask_sqlalchemy.SQLAlchemy
对象。你可以在flask_sqlalchemy模块中找到这个初始化函数

def _include_sqlalchemy(obj):
    for module in sqlalchemy, sqlalchemy.orm:
        for key in module.__all__:
            if not hasattr(obj, key):
                setattr(obj, key, getattr(module, key))

仅供测试:您可以输入

from sqlalchemy.orm import Query
。我认为 PyCharm 会很好地找到它的对象。

我无法提出任何解决方案,也许这里的其他人知道动态添加属性自动完成的可能性。


14
投票
class User(db.Model):
    query: db.Query # Type hint here
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(16), index=True, unique=True)

添加类型提示

query: db.Query


0
投票

就这样使用吧

class Aa(db.Model):
    query: db.Query = db.session.query_property()
    __tablename__ = 'aa'
    name = db.Column(db.String)
    age = db.Column(db.Integer)
    uuid = db.Column(db.Integer, primary_key=True, server_default=db.FetchedValue())

然后我们得到了

print(Aa.query.first()) # <Aa 1>

0
投票

根据我的经验,flask sqlalchemy 自动完成的最有效解决方案是安装flask-sqlalchemy-stubs 包,我发现这种方法特别有洞察力。

如果这解决了您的问题,请随时通过我的书探索简洁的解决方案https://pythonalliance.gumroad.com/l/ayuze您可以在其中发现有效的一行修复。

© www.soinside.com 2019 - 2024. All rights reserved.