我正在尝试使用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}解析rfc1738网址; SERVER = mymachinename; DATABASE = mydb; UID = sa; PWD = admin1'
我正在使用连接字符串sqlSoup.Something like this
db = sqlsoup.SQLSoup(connectionstring)
修改 我尝试使用SqlAlchemy中的Automap,但它也失败并显示相同的消息
追踪(最近一次通话): 文件" C:\ Sandbox \ Python脚本\ BumpValues \ newConnectivityTest.py",第7行,in 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中 return 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中 return _parse_rfc1738_args(name_or_url) 文件" C:\ Python27 \ lib \ site-packages \ sqlalchemy \ engine \ url.py",第225行,在_parse_rfc1738_args中 "无法从字符串'%s'"解析rfc1738网址% 名称) sqlalchemy.exc.ArgumentError:无法解析rfc1738 URL中的字符串' DRIVER = {SQL Server}; SERVER = gagan; DATABASE = persons; UID = sa; PWD = admin1;' [以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)
你能告诉我这里我做错了什么吗?
修改 我认为这不是布莱恩提出的问题的副本。例如,我遵循问题
中建议的相同示例 import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://sa:admin1@gagan/persons')
但即使它失败并显示相同的消息
以下是快照.. 第一个使用类型&#34的连接字符串;' mssql + pyodbc:// user:password @ server / database'"
而第二个使用类型的连接字符串 ' DRIVER = {SQL Server}; SERVER = gagan; DATABASE = people; UID = sa; PWD = admin1;
谢谢
答案 0 :(得分:6)
好的,这似乎解决了问题
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
答案 1 :(得分:1)
Windows生态系统中还有其他驱动程序,您也可以尝试其他2个驱动程序:)
实际上有两个或三个SQL Server驱动程序 由Microsoft分发:一个被称为" SQL Server"和 其他作为" SQL Native Client"和#34; 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
由于在SQLAlchemy之上编写的SQLSoup,您必须使用以下连接字符串:
"mssql+pyodbc://sa:admin1@mymachinename/mydb"
参考:http://docs.sqlalchemy.org/en/rel_0_8/dialects/mssql.html#module-sqlalchemy.dialects.mssql.pyodbc