Pycharm SqlAlchemy自动完成无法正常工作

时间:2016-08-23 10:50:12

标签: python autocomplete sqlalchemy pycharm flask-sqlalchemy

我正在使用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)是的,File |中的右解释器设置|项目
3)是的,PyCharm未处于省电模式 4)是的,我有专业版。

2 个答案:

答案 0 :(得分:7)

PyCharm(或任何其他IDE)无法找到大多数方法(query()add()commit()等),因为它们未在flask_sqlalchemy.SQLAlchemy类中定义。 SQLAlchemy方法在初始化期间动态添加到flask_sqlalchemy.SQLAlchemy个对象。您可以在flask_sqlalchemy module中找到此初始化函数:

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会发现它的对象就好了。

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

答案 1 :(得分:2)

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 enter image description here