2014-05-19 12 views
5

Sto lavorando in un ambiente in cui mi viene fornita una connessione ODBC, che è stata creata utilizzando credenziali a cui non ho accesso (per motivi di sicurezza). Comunque vorrei accedere al database sottostante usando SQLAlchemy - quindi la mia domanda è, posso passare questa connessione ODBC a qualcosa come create_engine, o in alternativa, avvolgerlo in modo tale che assomigli ad una connessione SQLAlchemy?In SQLAlchemy, posso creare un motore da una connessione ODBC esistente?

Come domanda supplementare (e lavorando sull'ipotesi ottimistica che la prima parte possa essere soddisfatta) c'è un modo per dire a SQLA quale dialetto usare per l'RDBMS sottostante?

Grazie

risposta

6

sì è possibile:

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

tuttavia, se avete veramente solo un collegamento già creato, al contrario di un richiamabile che li crea, si necessario utilizzare solo questo motore in un thread singolo, un'operazione alla volta. Non è sicuro per l'uso in un'applicazione multithread.

Se OTOH si può effettivamente ottenere ad una funzione Python che crea nuove connessioni ogni volta chiamato, questo è molto più gli appositi:

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

il motore di cui sopra sarà in comune le connessioni normalmente e può essere utilizzato liberamente come fonte di connettività.

+0

Grazie per la vostra risposta utile :-) In realtà sto ottenendo la connessione ODBC da un metodo di fabbrica, quindi potrei scrivere un semplice (molto semplice) wrapper che genera connessioni su richiesta. – Andy

+0

Qualche idea sul mio secondo punto (specificando il dialetto)? Sono sicuro che ho visto un modo per farlo nei documenti di SQLA, ma non riesco a trovarlo ora (c'è * così * gran parte del materiale :-)) – Andy

+0

Aha - Penso di averlo capito - Ho appena cambiato la prima parte dell'URL - il bit prima del segno più - sì? Ora leggendo altri documenti su create_engine, incluse le opzioni del pool :-) – Andy

Problemi correlati