Python SQLAlchemy PyODBC MS SQL Server无DSN连接
通过pyodbc使用python2.7和MS-odbc驱动程序。我的连接字符串如下所示: mssql+pyodbc://myuser:mypass@serverip/instancename?driver=ODBC+driver+11+for+SQL+Server 我登录失败。但是,如果在microsoft sql server management studio中使用相同的凭据和“serverip\instancename”,则可以连接 让我抓狂的是几天前,这个相同的连接字符串对我有效,但是连接到同一台机器上的另一个sql server实例。 所以我想弄清楚的是如何对其进行故障排除Python SQLAlchemy PyODBC MS SQL Server无DSN连接,python,sql-server,sqlalchemy,pyodbc,Python,Sql Server,Sqlalchemy,Pyodbc,通过pyodbc使用python2.7和MS-odbc驱动程序。我的连接字符串如下所示: mssql+pyodbc://myuser:mypass@serverip/instancename?driver=ODBC+driver+11+for+SQL+Server 我登录失败。但是,如果在microsoft sql server management studio中使用相同的凭据和“serverip\instancename”,则可以连接 让我抓狂的是几天前,这个相同的连接字符串对我有效,但是连
谢谢你的指点。学习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我刚刚讨论了这个问题,它失败的原因是端口,每个实例侦听不同的端口,因此您需要指出该实例的端口 我的代码是:
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')]
通过创建引擎,除了sqlalchemy之外,不需要其他库
但如果您想知道实例的端口,可以使用:
或者在与SQL Studio(或任何其他)连接的Windows中,对DB执行一些选择操作,同时在CMD中运行netstat以获取端口:
C:\Users\pla>netstat -qfa | findstr host
TCP 10.0.0.1:##87 host.abc.nt:4096 ESTABLISHED
这是哪个操作系统?这是否也是同一个客户端(可能与未安装驱动程序有关)?已安装驱动程序。客户端是DebianLinux。有一件事让我有点困惑,那就是“实例名”和“数据库”的命名法。此物理服务器上有多个SQL server实例。我感兴趣的特定SQL server实例有多个数据库。这里所说的数据库,我指的是sql语句中的“usedb1”意思的数据库。我认为您需要一个反斜杠(
\
)来指定实例名称,并将数据库名称放在正斜杠(/
)后面。所以可能mssql+pyodbc://myuser:mypass@serverip\instancename?driver=ODBC+driver+11+for+SQL+Server
可以吗?我也试过反斜杠,谢谢。我的最新理论是,MS SQL Server为同一物理服务器(OS)上的不同命名实例使用不同的端口。因此,连接到命名实例可能只是指定该命名实例的端口号的问题。我只需要获得一些系统管理员帮助来尝试此功能,现在是周末,所以请不要犹豫。re:“我登录失败。但是,如果我在microsoft sql server management studio中使用相同的凭据和“serverip\instancename”,我就可以连接。”-有关说明,请参阅。