mypy и sqlalchemy: ошибка: имя 'sqlalchemy' не определено
У меня есть следующая функция:
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 ответа
Чтобы использовать подсказки типа, вы импортируете то, что пытаетесь вернуть. В первом примере я пытаюсь определить функцию, возвращающую некоторые вещи 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]:
Я получил это благодаря ответу Гончора.
Мне нужно было добавить
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