我正在一个我获得ODBC连接的环境中工作,该连接是使用我无法访问的凭据创建的(出于安全原因).但是我想使用SQLAlchemy访问底层数据库 – 所以我的问题是,我可以将这个ODBC连接传递给类似create_engine的东西,或者以一种看起来像SQLAlchemy连接的方式包装它吗?
作为一个补充问题(并且乐观地假设第一部分可以满足),我可以告诉SQLA用于底层RDBMS的方言是什么?
谢谢
解决方法:
是的你可以:
from sqlalchemy import create_engine
from sqlalchemy.pool import StaticPool
eng = create_engine("mssql+pyodbc://", poolclass=StaticPool, creator=lambda: my_odbc_connection)
但是,如果您确实只创建了一个连接,而不是创建它们的可调用连接,则必须仅在一个线程中使用此引擎,一次只能使用一个操作.在多线程应用程序中使用它不是线程安全的.
如果OTOH你实际上可以获得一个Python函数,无论何时调用都会创建新的连接,这更加适合:
from sqlalchemy import create_engine
eng = create_engine("mssql+pyodbc://", creator=my_odbc_connection_function)
上述引擎将正常汇集连接,可以*地用作连接源.