Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用create\u引擎的creator参数时如何将driver参数传递给sqlalchemy_Python_Sqlalchemy_Pyodbc - Fatal编程技术网

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
参数()传递到SQLAlchemy
create_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)