PyCharm SQLAlchemy自动完成

时间:2014-02-15 04:58:11

标签: python sqlalchemy pyramid pycharm

我开始评估PyCharm 3专业版,因为我将参与几个Pyramid + SQLAlchemy项目。 我真正喜欢的一件事是SQLAlchemy自动完成。

我会解释我的情景。

我用炼金术脚手架创建了一个新的初学者项目,我按照http://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/pycharm/index.html的说明进行操作。我还为我正在为此项目使用的解释器和虚拟环境安装了SQLAlchemy软件包。 此外,当我为此代码创建一个新的pycharm项目时,IDE建议我安装金字塔,sqlalchemy和其他包。当然我接受了这个建议,让IDE安装所有这些软件包。

在models.py文件中,DBSession声明如下:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

在views.py文件中,DBSession以这种方式使用:

one = DBSession.query(MyModel).filter(MyModel.name == 'one').first()

所以我开始玩IDE并做了类似的事情:输入DBSession。 IDE只是给了我一些建议,其中没有列出'查询'功能。然后我尝试输入:DBSession.query(MyModel)。并按下Ctrl + Space以尝试获取建议并显示“无建议”消息。

我真的想拥有SQLAlchemy对我可以在DBSession变量上使用的函数的建议(比如filter,filter_by,first等)。我会说这对我来说是强制性的:)

我有什么遗失的吗?或者,PyCharm不支持​​这个?

4 个答案:

答案 0 :(得分:9)

我发现的解决方案(从网络上的某个地方获取)是键入提示DBSession实例,如下所示:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
""":type: sqlalchemy.orm.Session"""

在此之后,代码完成似乎在项目的任何地方都可以正常工作

答案 1 :(得分:1)

请注意,该教程指出:

  

本指南是为PyCharm 2.7.3编写的,尽管许多主题适用于PyCharm 3.

在PyCharm 3 Professional中,安装Pyramid并开始使用脚手架要容易得多。请参阅1:17专业的视频教程Pyramid in PyCharm in 5 minutes之一。

此外,如果内容无法按预期运行,您可能想要吹走您的项目并重新开始。

PyCharm 3 Professional supports SQAlchemy如下。

  • 代码洞察力(2.6 +)
  • 可以在图表中查看数据库结构。请参阅使用图表。
  • 代码完成并解决。 (3.0 +)

查看有关如何使用code completion的更多信息。

答案 2 :(得分:0)

我在变量赋值之后使用类型声明:

from sqlalchemy import create_engine
from sqlalchemy.engine import Engine

...

engine = create_engine(connect_str, max_overflow=10)
engine: Engine

作为for循环中变量的用法,我使用了:

for table, meta in tables.items():
    meta: Table
    pass

其中tablessqlalchemy.orm.mapper.Mapper,而table是导入类型:

from sqlalchemy import create_engine, Table

答案 3 :(得分:0)

如果有人现在到这里,可以找到我所见过的最佳解决方案here。为节省您的点击次数:

from contextlib import contextmanager
from typing import ContextManager

@contextmanager
def session() -> ContextManager[Session]:
    yield Session(...)