mypy和sqlalchemy:错误:未定义名称'sqlalchemy'

时间:2019-01-31 10:09:41

标签: python-3.x sqlalchemy mypy

我具有以下功能:

def _init_db() -> "sqlalchemy.orm.session.Session":
    engine = create_engine("sqlite:///my_db.db")
    Base.metadata.create_all(engine)

    # Creating Session
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker(bind = engine)
    session = Session()
    return session

在代码上运行mypy会给我这个错误

  

错误:名称'sqlalchemy'未定义

我尝试过在sqlalchemy.orm.session.Session前后加上引号而没有

如何为sqlalchemy类添加类型提示?我想念什么?

2 个答案:

答案 0 :(得分:1)

为了使用类型提示,您已经导入了要返回的内容。在第一个示例中,我试图定义一个不导入sqlite3即可返回一些sqlite3内容的函数。导入此模块后,一切正常。

In [1]: def init_db() -> sqlite3.Connection:
   ...:     return sqlite3.connection
   ...:
   ...:
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-b64a7629272c> in <module>()
----> 1 def init_db() -> sqlite3.Connection:
      2     return sqlite3.connection

NameError: name 'sqlite3' is not defined

In [2]: import sqlite3

In [3]: def init_db() -> sqlite3.Connection:
   ...:     return sqlite3.connection
   ...:
   ...:

In [4]:

答案 1 :(得分:0)

我把它归功于gonczor的答案。

我需要添加

from sqlalchemy.orm.session import Session

在开始,然后执行

def _init_db() -> "Session":
    engine = create_engine("sqlite:///my_db.db")
    Base.metadata.create_all(engine)

    # Creating Session
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker(bind = engine)
    session = Session()
    return session