PyCharm Flask-SQLAlchemy 不会自动补全db.Column、Integer、String等

db = SQLAlchemy() 后,用 db. 时PyCharm的自动完成功能仅能列出 Model 等,如 ColumnIntegerString 等等都无法给出提示。

但打开下载的示例程序:helloflask,确实可以进行完整的提示。

请问需要怎么设置?谢谢!

Pycharm为最新的社区版。

据我了解目前 PyCharm 还没法给这种「动态引用/导入」(不知道最合适的词是哪个,具体见代码)的对象实现自动补全……示例里有也许是因为有其他预先写好的名称相同的代码。

你好,请问目前有哪种编辑器或者IDE能较好的支持Flask、及插件(扩展)?
比如楼主说Column这种提示。谢谢!
我目前使用的是vscode。

大部分库的自动补全都是没问题的,不能补全的只是少量类似 Flask-SQLAlchemy 和 Flask-Marshmallow 这种动态添加属性的库。目前大部分编辑器和 IDE 都不支持自动补全动态添加的属性。我过段时间会尝试给 Flask-SQLAlchemy 解决这个问题。

db.*是对自动补全非常不友好的方式,原因grey给出的代码里面有,可以用sqlalchemy里面本来的对象,db.*跟这个是一样的:

import sqlalchemy as sa

class Post(db.Model):
    title = sa.Column(sa.String(128), nullable=False)
    ...
1 Like

我发现有一个方法即使是db.*也可以自动补全,就是用Kite AI Autocomplete Engine,这个软件对各种语言的自动补全都还挺智能的。尤其是Python,因为它一开始就是用来补全Python代码的,大家可以尝试一下。而且它能通过插件的方式支持VSCode,PyCharm,Atom,Vim等文本编辑器和IDE,免费版本的智能程度也完全不比PyCharm Pro差。

2 Likes

十分感谢,其次除了sqlalchemy外,我发现使用蓝图的时候也是无法自动补全的,比如使用工厂模式时:

def register_blueprints(app):
    app.register_blueprint(test_bp, url_prefix="/test")

这里的app.register_blueprint也是没有自动补全的,对python的理解也不是很足不太清楚这是什么原因导致的,希望大佬们解答。THX~!
新年快乐~

这里的 app 是一个函数接受的参数,编辑器没法知道它有什么属性或方法。

感谢! 李大的回答一针见血, 问题已经解决了。 我在传参的时候做了这样的处理:

def register_blueprints(app:Flask):
    app.register_blueprint(test_bp, url_prefix="/test")

再次感谢李大的解答,祝新年快乐!:tada::wink:

不客气,新年快乐!

请问这个问题解决了吗?

没有。临时也可以考虑直接手动从 SQLAlchemy 导入这些 API。如果没记错的话, 除了模型类继承的 Model 类要使用 db.Model,其他函数或类都可以直接从 sqlalchemy 包直接导入:

from sqlalchemy import Column, String, Integer, ForeignKey
from sqlalchemy.orm import relationship, backref

from app.extentions import db


class User(db.Model):
    id = Column(Integer, primary=True)
    name = Column(String(20))
    # ...