mypy и sqlalchemy: ошибка: имя 'sqlalchemy' не определено - PullRequest
0 голосов
/ 31 января 2019

У меня есть следующая функция:

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 голосов
/ 31 января 2019

Я получил его благодаря ответу Гончора.

Мне нужно было добавить

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
0 голосов
/ 31 января 2019

Чтобы использовать подсказки типа, вы импортируете то, что пытаетесь вернуть.В первом примере я пытаюсь определить функцию, возвращающую некоторые вещи 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]:
...