Как передать параметр драйвера в sqlalchemy при использовании параметра создателя create_engine - PullRequest
0 голосов
/ 05 марта 2019

У меня есть pyodbc объект подключения, использующий ключевое слово с функциональностью pyodbc.connect() (https://github.com/mkleehammer/pyodbc/wiki/Module#connect).

. Ключевые слова включают параметр драйвера:

conn = pyodbc.connect(driver="SQL Server", server="myserver")

Я использую это соединение для передачи функции SQLAlchemy create_engine() через параметр creator ( документы ) в соответствии с предложением на этот ответ :

engine = create_engine("mssql+pyodbc://", creator=lambda: conn)

Однако параметр creator теперь игнорирует параметры подключения, указанные в параметре URL:

Использование этой функции вызывает параметры подключения, указанные в аргументе URLбыть обойденным.

Это означает, что я получаю это предупреждение при создании движка:

SAWarning: имя драйвера не указано; это ожидается PyODBC при использованииСоединения без DSN "Имя драйвера не указано;"

Однако выполнение запроса sql в качестве теста возвращает правильные данные. Как я могу предоставить информацию о драйвере (я предполагаю, что mssql+pyodbc)в функцию create_engineубрать это предупреждение?

1 Ответ

0 голосов
/ 06 марта 2019

Кажется, вы передаете соединение DBAPI, а не создатель.Попробуйте объявить свою функцию создателя:

def creator():
    return pyodbc.connect(driver="SQL Server", server="myserver")

И передать функцию (не оценку функции) в качестве значения для создателя:

engine = create_engine("mssql+pyodbc://", creator=creator)
...