python - SqlAlchemy 等效于使用 FreeTDS 的 pyodbc 连接字符串

标签 python sql-server sqlalchemy pyodbc freetds

以下作品:

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: (Error) ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnectW)') None None

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

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

最佳答案

@Singletoned 的示例不适用于 SQLAlchemy 0.7.2。来自 SQLAlchemy docs for connecting to SQL Server :

如果您需要一个超出上述选项的连接字符串,请使用 odbc_connect 关键字传入 urlencoded 连接字符串。传入的会被urldecode直接传递。

所以为了让它发挥作用,我使用了:

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

关于python - SqlAlchemy 等效于使用 FreeTDS 的 pyodbc 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4493614/

相关文章:

python - 使用sklearn计算仅给定单词列表的tf-idf权重

python - 使用 Flask 和 SQLAlchemy 的 Celery 任务中的数据库未更新

python - 带有 Pandas 数据框的 CountVectorizer

python - 按计数值对字典进行排序

sql - 使用 SQL Server 查找最近 field 的半正弦公式 - vb.net

sql-server - 在 varchar(50) 列与 varchar(2000) 列中插入值时的性能差异?

python - 从 SQLAlchemy Core 中的多个表连接中选择列

python - Sqlalchemy : InvalidRequestError: Object '<User at 0x3a970d0>' is already attached to session '2' (this is '3' )

python - 强制 Django 显示英语作为后备

sql-server,SQL 查询中的 IF 语句