Как создать объект sqlalchemy с данным соединением pyodbc? [Дубликат]

5
задан Andy 19 May 2014 в 18:02
поделиться

1 ответ

да, вы можете:

from sqlalchemy import create_engine
from sqlalchemy.pool import StaticPool
eng = create_engine("mssql+pyodbc://", poolclass=StaticPool, creator=lambda: my_odbc_connection)

однако, если у вас действительно есть только одно уже созданное соединение, в отличие от вызываемого, которое их создает, вы должны использовать этот движок только в одном потоке, один одновременно. Это не является потокобезопасным для использования в многопоточном приложении.

Если OTOH вы действительно можете получить функцию Python, которая создает новые соединения при вызове, это гораздо больше appopriate:

from sqlalchemy import create_engine
eng = create_engine("mssql+pyodbc://", creator=my_odbc_connection_function)

вышеупомянутый движок нормально соединяет соединения и может использоваться свободно как источник подключения.

6
ответ дан zzzeek 22 August 2018 в 03:48
поделиться
  • 1
    Спасибо за ваш полезный ответ :-) Я на самом деле получаю соединение ODBC от фабричного метода, поэтому я мог написать простую (очень простую) оболочку, которая генерирует соединения по требованию. – Andy 19 May 2014 в 19:25
  • 2
    Любые мысли по моему второму пункту (с указанием диалекта)? Я уверен, что я видел какой-то способ сделать это в документах SQLA, но не могу найти его сейчас (есть so большая часть материала :-)) – Andy 19 May 2014 в 19:26
  • 3
    Ага - я думаю, что у меня это есть - я просто меняю первую часть URL-адреса - бит перед знаком плюса - да? Теперь читаем больше документов о create_engine, включая опции пула :-) – Andy 19 May 2014 в 19:33
  • 4
    единственным диалектом, который хорошо работает с odbc, является MSSQL. Другие варианты включают MySQL или Sybase, не уверен, насколько хорошо они работают, поскольку они очень редко используются. у нас нет поддержки ODBC для других типов баз данных (поскольку Pyodbc этого не делает). – zzzeek 19 May 2014 в 22:51
  • 5
    Это будет весело тогда - я на самом деле использую Netezza и надеялся, что я смогу «проехать» с диалектом Postgres. Думаю, мне придется обойтись с MSSQL и обойти исключения. – Andy 20 May 2014 в 09:43
Другие вопросы по тегам:

Похожие вопросы: