【问题标题】:Pycharm SqlAlchemy autocomplete not workingPycharm SqlAlchemy 自动完成功能不起作用
【发布时间】:2016-12-30 03:51:45
【问题描述】:

我正在使用 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


【解决方案1】:

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

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

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2018-08-15
      • 2018-03-04
      • 2014-03-14
      • 1970-01-01
      • 2017-02-28
      • 2020-11-14
      • 2014-03-11
      • 2014-01-16
      相关资源
      最近更新 更多