Python 使用create\u引擎的creator参数时如何将driver参数传递给sqlalchemy
我有一个Python 使用create\u引擎的creator参数时如何将driver参数传递给sqlalchemy,python,sqlalchemy,pyodbc,Python,Sqlalchemy,Pyodbc,我有一个pyodbc连接对象,它使用pyodbc.connect()()的关键字功能 关键字包括驱动程序参数: conn=pyodbc.connect(driver=“SQL Server”,Server=“myserver”) 我使用此连接通过creator参数()传递到SQLAlchemycreate_engine()函数,建议如下: engine=create\u engine(“mssql+pyodbc://”,creator=lambda:conn) 但是,creator参数现在会忽略
pyodbc
连接对象,它使用pyodbc.connect()
()的关键字功能
关键字包括驱动程序参数:
conn=pyodbc.connect(driver=“SQL Server”,Server=“myserver”)
我使用此连接通过creator
参数()传递到SQLAlchemycreate_engine()
函数,建议如下:
engine=create\u engine(“mssql+pyodbc://”,creator=lambda:conn)
但是,creator
参数现在会忽略URL
参数中指定的连接参数:
使用此函数会导致绕过URL参数中指定的连接参数
这意味着我在创建引擎时收到以下警告消息:
SAWarning:未指定驱动程序名称;当使用无DSN连接时,PyODBC预期会出现这种情况
“未指定驱动程序名称;”
但是,作为测试运行sql查询会返回正确的数据。如何将驱动程序信息(我假设它是
mssql+pyodbc
)提供给create\u engine函数以删除此警告?似乎您正在传递DBAPI连接,而不是创建者。尝试声明创建者函数:
def creator():
return pyodbc.connect(driver="SQL Server", server="myserver")
并将函数(不是函数的评估)作为值传递给创建者:
engine = create_engine("mssql+pyodbc://", creator=creator)
似乎您正在传递的是DBAPI连接,而不是创建者。尝试声明创建者函数:
def creator():
return pyodbc.connect(driver="SQL Server", server="myserver")
并将函数(不是函数的评估)作为值传递给创建者:
engine = create_engine("mssql+pyodbc://", creator=creator)
函数调用中的lambda函数不会做同样的事情吗?:creator=lambda:connWell lambda将始终返回相同的连接。我假设有多个线程,并且连接没有被共享。如果它没有被共享,您可以尝试对每个线程执行全局操作,在这种情况下,lambda就可以了,您必须小心使用连接。但最常见的情况是,每个线程都需要一个连接,这就是为什么返回新连接的函数很方便的原因。查询完成后,每个线程关闭其连接并将其返回到de pool.Uhmm。。仔细阅读pyodbc文档,似乎线程之间无法共享连接:(这是对当前pyodbc实现的限制,而不是一般意义上的odbc)函数调用中的lambda函数不会做同样的事情吗?:creator=lambda:connWell lambda将始终返回相同的连接。我假设有多个线程,并且连接没有被共享。如果它没有被共享,您可以尝试对每个线程执行全局操作,在这种情况下,lambda就可以了,您必须小心使用连接。但最常见的情况是,每个线程都需要一个连接,这就是为什么返回新连接的函数很方便的原因。查询完成后,每个线程关闭其连接并将其返回到de pool.Uhmm。。更仔细地阅读pyodbc文档,似乎线程之间无法共享连接:(这是对当前pyodbc实现的限制,而不是一般意义上的odbc)