以下作品:
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。
@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