SQLAlchemy PyODBC MS SQL Server无DSN连接

时间:2015-05-21 02:02:52

标签: python sql-server sqlalchemy pyodbc

通过pyodbc使用python 2.7和MS odbc驱动程序。我的连接字符串如下所示:

MSSQL + pyodbc://为myuser:将mypass @ SERVERIP / INSTANCENAME驱动= ODBC +驱动+ 11 + +为​​SQL +服务器

我登录失败了。但是,如果我在microsoft sql server管理工作室中使用相同的凭据和“serverip \ instancename”,我可以连接。

令我疯狂的事情是几天前,这个相同的连接字符串对我有效,但对同一台机器上的不同sql server实例。 所以我想弄清楚的是如何进行故障排除。

感谢您的任何指示。

2 个答案:

答案 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