2014-05-19 2 views
5

Я работаю в среде, где мне предоставляется ODBC-соединение, которое было создано с использованием учетных данных, к которым у меня нет доступа (по соображениям безопасности). Однако я хотел бы получить доступ к базовой базе данных с помощью SQLAlchemy - так что я могу передать это соединение ODBC на что-то вроде create_engine или, наоборот, обернуть его таким образом, чтобы он выглядел как соединение SQLAlchemy?В SQLAlchemy я могу создать Engine из существующего соединения ODBC?

В качестве дополнительного вопроса (и работа над оптимистическим допущением, что первая часть может быть удовлетворена) есть ли способ, которым я могу сказать SQLA, какой диалект использовать для базовой RDBMS?

Благодаря

ответ

6

да вы можете:

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

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

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

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

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

+0

Спасибо за ваш полезный ответ :-) Я на самом деле получаю соединение ODBC от фабричного метода, поэтому я мог написать простую (очень простую) оболочку, которая генерирует соединения по требованию. – Andy

+0

Любые мысли о моей второй точке (с указанием диалекта)? Я уверен, что видел какой-то способ сделать это в документах SQLA, но не могу найти его сейчас (есть * так * большая часть материала :-)) – Andy

+0

Ага - Я думаю, что у меня это есть - я просто меняю первая часть URL - бит перед знаком плюса - да? Теперь читаем больше документов на create_engine, включая пул options :-) – Andy

Смежные вопросы