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 成功