小编典典

使用FreeTDS的Pyodbc连接字符串的SqlAlchemy等效项

python

以下作品:

import pyodbc
pyodbc.connect('DRIVER={FreeTDS};Server=my.db.server;Database=mydb;UID=myuser;PWD=mypwd;TDS_Version=8.0;Port=1433;')

以下失败:

import sqlalchemy
sqlalchemy.create_engine("mssql://myuser:mypwd@my.db.server:1433/mydb?driver=FreeTDS& odbc_options='TDS_Version=8.0'").connect()

上面的错误消息是:

DBAPIError:(错误)(“ 08001”,“ [08001] [unixODBC] [FreeTDS] [SQL
Server]无法连接到数据源(0)(SQLDriverConnectW)”)无无

有人能指出我正确的方向吗?有没有一种方法可以简单地告诉sqlalchemy将特定的连接字符串传递给pyodbc?

请注意: 我想保留此DSN-less。


阅读 218

收藏
2020-12-20

共1个答案

小编典典

@Singletoned的示例不适用于SQLAlchemy 0.7.2。从用于连接到SQL
Server
SQLAlchemy文档中

If you require a connection string that is outside the options presented above, use the odbc_connect keyword to pass in a urlencoded connection string. What gets passed in will be urldecoded and passed directly.

因此,为了使它起作用,我使用了:

import urllib
quoted = urllib.quote_plus('DRIVER={FreeTDS};Server=my.db.server;Database=mydb;UID=myuser;PWD=mypwd;TDS_Version=8.0;Port=1433;')
sqlalchemy.create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted))

这也应适用于Sybase。

注意:在python 3中,urllib模块已拆分为多个部分并重命名。因此,python 2.7中的这一行:

quoted = urllib.quote_plus

必须在python3中更改为这一行:

quoted = urllib.parse.quote_plus
2020-12-20