使用create_engine的creator参数时如何将驱动程序参数传递给sqlalchemy

时间:2019-03-05 06:25:35

标签: python sqlalchemy pyodbc

我有一个使用pyodbchttps://github.com/mkleehammer/pyodbc/wiki/Module#connect)关键字功能的pyodbc.connect()连接对象。

关键字包含驱动程序参数:

conn = pyodbc.connect(driver="SQL Server", server="myserver")

根据此docs的建议,我正在使用此连接通过create_engine()参数(answer)传递给SQLAlchemy creator函数:

engine = create_engine("mssql+pyodbc://", creator=lambda: conn)

但是,creator参数现在忽略了URL参数中指定的连接参数:

  

使用此功能会导致忽略URL参数中指定的连接参数。

这意味着我在创建引擎时收到以下警告消息:

  

SAWarning:未指定驱动程序名称;使用无DSN的连接时,PyODBC会期望这样做     “未指定驱动程序名称;”

但是,将sql查询作为测试运行会返回正确的数据。如何将驱动程序信息(假设其为mssql+pyodbc)提供给create_engine函数以消除此警告?

1 个答案:

答案 0 :(得分:0)

似乎您正在传递DBAPI连接,而不是创建者。尝试声明您的创建者功能:

def creator():
    return pyodbc.connect(driver="SQL Server", server="myserver")

并将函数(而不是函数的评估)作为创建者的值传递:

engine = create_engine("mssql+pyodbc://", creator=creator)