PyOdbc 无法连接到 sql server 实例

Posted

技术标签:

【中文标题】PyOdbc 无法连接到 sql server 实例【英文标题】:PyOdbc fails to connect to a sql server instance 【发布时间】:2015-08-08 12:35:56 【问题描述】:

我正在尝试使用 Python 2.7(32 位)在 Windows 7 上使用 pyodbc 版本 3.0.6.、SQLAlchemy 1.0.4 连接到 sql server 实例。我正在使用如下连接字符串

    DRIVER=SQL Server;SERVER=mymachinename;DATABASE=mydb;UID=sa;PWD=admin1;

但我不断收到此错误

无法从字符串 'DRIVER=SQL Server;SERVER=mymachinename;DATABASE=mydb;UID=sa;PWD=admin1' 解析 rfc1738 URL

我正在使用带有 sqlSoup 的连接字符串。类似这样的东西

    db = sqlsoup.SQLSoup(connectionstring)

编辑 我尝试使用来自 SqlAlchemy 的Automap,它也失败并显示相同的消息

Traceback(最近一次调用最后一次): 文件“C:\Sandbox\Python scripts\BumpValues\newConnectivityTest.py”,第 7 行,在 engine = create_engine("DRIVER=SQL Server;SERVER=gagan;DATABASE=persons;UID=sa;PWD=admin1;") 文件“C:\Python27\lib\site-packages\sqlalchemy\engine__init__.py”,第 386 行,在 create_engine 返回 strategy.create(*args, **kwargs) 文件“C:\Python27\lib\site-packages\sqlalchemy\engine\strategies.py”,第 49 行,在创建中 u = url.make_url(name_or_url) 文件“C:\Python27\lib\site-packages\sqlalchemy\engine\url.py”,第 176 行,在 make_url 返回 _parse_rfc1738_args(name_or_url) _parse_rfc1738_args 中的文件“C:\Python27\lib\site-packages\sqlalchemy\engine\url.py”,第 225 行 “无法从字符串 '%s' 解析 rfc1738 URL”% 名称) sqlalchemy.exc.ArgumentError: 无法从字符串“DRIVER=SQL Server;SERVER=gagan;DATABASE=persons;UID=sa;PWD=admin1;”解析 rfc1738 URL [在 0.4 秒内完成,退出代码为 1] [shell_cmd: python -u "C:\Sandbox\Python scripts\BumpValues\newConnectivityTest.py"]

我的代码如下

from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine


Base = automap_base()
engine = create_engine("DRIVER=SQL Server;SERVER=gagan;DATABASE=persons;UID=sa;PWD=admin1;")
Base.prepare(engine, reflect=True)

usrs = Base.classes.users
print(usrs)

你能告诉我我在这里做错了什么吗?

编辑 我建议这不是 Bryan 建议的问题的重复。例如,我遵循问题​​中建议的相同示例

    import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://sa:admin1@gagan/persons')

但即使它失败并显示相同的消息

这是快照.. 第一个使用“'mssql+pyodbc://user:password@server/database'”类型的连接字符串

而第二个使用类型的连接字符串 'DRIVER=SQL Server;SERVER=gagan;DATABASE=people;UID=sa;PWD=admin1;

谢谢

【问题讨论】:

Connecting to SQL Server 2012 using sqlalchemy and pyodbc的可能重复 使用连接字符串mssql+pyodbc://sa:admin1@gagan/persons 的代码不会失败并显示与原始错误消息相同的错误消息。使用更新的代码示例仔细检查错误消息并提供更新的消息。 我已经更新了这个问题。抱歉,快照花了一些时间。 【参考方案1】:

好的,这似乎已经解决了问题

import urllib    
connection_string = "DRIVER=SQL Server;Database=people;SERVER=gagan;UID=sa;PWD=admin1"
connection_string = urllib.quote_plus(connection_string) 
connection_string = "mssql+pyodbc:///?odbc_connect=%s" % connection_string

【讨论】:

我收到了这个错误AttributeError: module 'urllib' has no attribute 'quote_plus' quote_plus 现在包含在parse 中。使用urllib.parse.quote_plus(connection_string)参考github.com/web2py/web2py/issues/1822#issuecomment-370919823【参考方案2】:

Windows 生态系统中还有其他可用的驱动程序,您也可以尝试其他 2 个 :)

实际上已经编写了两三个 SQL Server 驱动程序,并且 由 Microsoft 分发:一种称为“SQL Server”,而 其他为“SQL Native Client”和“SQL Server Native Client 10.0”。

DRIVER=SQL Server;SERVER=cloak;DATABASE=test;UID=user;PWD=password

DRIVER=SQL Native Client;SERVER=dagger;DATABASE=test;UID=user;PWD=password

DRIVER=SQL Server Native Client 10.0;SERVER=dagger;DATABASE=test;UID=user;PWD=password

参考:https://code.google.com/p/pyodbc/wiki/ConnectionStrings

编辑:1

由于 SQLSoup 是在 SQLAlchemy 之上编写的,因此您必须使用以下连接字符串:

"mssql+pyodbc://sa:admin1@mymachinename/mydb"

参考:http://docs.sqlalchemy.org/en/rel_0_8/dialects/mssql.html#module-sqlalchemy.dialects.mssql.pyodbc

【讨论】:

以上是关于PyOdbc 无法连接到 sql server 实例的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyodbc 将 Python 连接到 MS SQL Server

使用 sqlalchemy 和 pyodbc 连接到 SQL Server 2012

使用 pyodbc 将 SQL Server 连接到 Python 3

如果 SQL Server 是 MS 2012,则从 Pyodbc 连接到 SQL 14 Azure db

无法使用 pyodbc/pymssql 和 Robot Framework 连接到 SQL\Express

远程连接到 MS SQL - 使用 pyodbc 时出错 vs 使用 SQL Server Management Studio 成功