Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy PyODBC MS SQL Server无DSN连接_Python_Sql Server_Sqlalchemy_Pyodbc - Fatal编程技术网

Python SQLAlchemy PyODBC MS SQL Server无DSN连接

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”,则可以连接 让我抓狂的是几天前,这个相同的连接字符串对我有效,但是连

通过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实例。 所以我想弄清楚的是如何对其进行故障排除


谢谢你的指点。

学习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”,我就可以连接。”-有关说明,请参阅。