通过pyodbc使用python 2.7和MS odbc驱动程序。我的连接字符串如下所示:
MSSQL + pyodbc://为myuser:将mypass @ SERVERIP / INSTANCENAME驱动= ODBC +驱动+ 11 + +为SQL +服务器
我登录失败了。但是,如果我在microsoft sql server管理工作室中使用相同的凭据和“serverip \ instancename”,我可以连接。
令我疯狂的事情是几天前,这个相同的连接字符串对我有效,但对同一台机器上的不同sql server实例。 所以我想弄清楚的是如何进行故障排除。
感谢您的任何指示。
答案 0 :(得分:2)
我刚刚经历了这个,它失败的原因是端口,每个实例都侦听不同的端口,因此您需要指出该实例的端口。
我的代码是:
<center>
@RenderBody()
</center>
创建引擎后,除sqlalchemy之外就不需要其他库
,但是如果您想知道实例的端口,则可以使用: Github repository from gordthompson/sqlserverport
或者在Windows中,您与SQL Studio(或其他任何工具)连接时,会选择一些数据库,同时在CMD中运行netstat来获取端口:
DBserver='host.abc.nt'
DBengine='devenv'
DBport='####'
DBname='mydb'
DBDriver='ODBC Driver 13 for SQL Server'
DBuser='user'
DBpwd='pass'
DBuserpass = DBuser if len(DBuser) > 0 else ''
DBuserpass = DBuserpass + ':' + DBpwd if len(DBuser) > 0 else ''
if len(DBengine) > 0:
DBserver = DBserver + '\\' + DBengine
engine = sa.create_engine(f'''mssql+pyodbc://{DBuserpass}@{DBserver}:{DBport}/{DBname}?driver={DBDriver}''')
query=engine.execute('SELECT DB_NAME(), @@SERVERNAME')
query.fetchall()
[('mydb', 'host\\devenv')]
答案 1 :(得分:1)
在学习sqlalchemy时,我遇到了同样的问题。这种方法对我有用:
import urllib
params = urllib.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
来自sqlalchemy文档。它似乎与登录凭据无关,但错误消息对我来说是相同的,这很有用。
ref http://docs.sqlalchemy.org/en/latest/dialects/mssql.html#pass-through-exact-pyodbc-string