在SQLAlchemy中,我可以从现有的ODBC连接创建引擎吗?

And*_*ndy 6 python odbc sqlalchemy

我正在一个我获得ODBC连接的环境中工作,该连接是使用我无法访问的凭据创建的(出于安全原因).但是我想使用SQLAlchemy访问底层数据库 - 所以我的问题是,我可以将这个ODBC连接传递给类似create_engine的东西,或者以一种看起来像SQLAlchemy连接的方式包装它吗?

作为一个补充问题(并且乐观地假设第一部分可以满足)是否有一种方法可以告诉SQLA用于底层RDBMS的方言是什么?

谢谢

zzz*_*eek 7

是的你可以:

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

但是,如果您确实只创建了一个连接,而不是创建它们的可调用连接,则必须仅在一个线程中使用此引擎,一次只能使用一个操作.在多线程应用程序中使用它不是线程安全的.

如果OTOH你实际上可以获得一个Python函数,无论何时调用都会创建新的连接,这更加适合:

from sqlalchemy import create_engine
eng = create_engine("mssql+pyodbc://", creator=my_odbc_connection_function)
Run Code Online (Sandbox Code Playgroud)

上述引擎将正常汇集连接,可以自由地用作连接源.