【问题标题】:unable to connect MSSQL using pyodbc无法使用 pyodbc 连接 MSSQL
【发布时间】:2019-05-28 10:38:57
【问题描述】:

我已经在 StackOverflow 上查找了很多关于 MSSQL 与 pyodbc 连接的类似问题,但他们的解决方案都没有帮助。
我正在尝试连接位于 VM 服务器上的 MSSQL 数据库,并且正在尝试从本地系统访问它。
以下是代码:

import pyodbc

server = '172.xxx.xxx.xxx,1443'
database = 'sample_db'
username = 'SA'
password = 'xxxxx'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+password+';Trusted_Connection=yes')
cursor = cnxn.cursor()

cursor.execute("SELECT name FROM sys.databases;")
results = cursor.fetchall()
print(results)

我得到的错误如下:

pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

如果 pyodbc 有任何其他替代方案可以更好地与 MSSQL 配合使用,请务必提及。 任何帮助表示赞赏,谢谢。

编辑

根据@GordThompson 的建议,我检查了pyodbc.drivers() 中的驱动程序,发现我的系统只有“SQL Server”驱动程序,因此我将驱动程序更改为 SQL Server。当前代码如下所示:

import pyodbc
server = '172.xxx.xxx.xxx,1443'
database = 'sample_db'
username = 'SA'
password = 'xxxxx'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+password+';Trusted_Connection=yes')
cursor = cnxn.cursor()

cursor.execute("SELECT name FROM sys.databases;")
results = cursor.fetchall()
print(results)

但是现在我得到了一个完全不同的错误,仍然不确定它是什么
错误:

pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53)')

【问题讨论】:

  • 您的.odbc.iniodbcinst.ini 设置了吗? --> unixodbc.org/odbcinst.html
  • @aws_apprentice 嗨,我刚刚在虚拟机的 ubuntu 上安装了 mssql。我没有对任何.ini 文件做任何事情。我到底应该在这里做什么/改变?
  • 查看pyodbc.drivers() 返回的列表,了解您的 Python 应用程序可以使用哪些驱动程序。
  • 您确定 SQL Server 实例启用了 TCP/IP,正在侦听端口 1443,并且运行它的计算机允许到该端口的外部入站连接吗?
  • 除了@GordThompson 所说的,您还应该查看您使用的身份验证类型。您设置了 UID 和 PWD,但也设置了 Trusted_Connection=yes,这意味着 UID 和 PWD 密钥都将被忽略。您现在设置它的方式将不会使用您指定的帐户,这可能是访问被拒绝问题的一部分。

标签: python sql-server python-3.x pyodbc


【解决方案1】:

使用UIDPWD 登录时不要提及Trusted_Connection 参数,这一点很重要。因此,当我删除Trusted_Connection 参数时,它能够成功建立连接。 所以后来为我工作的连接字符串只有这些,

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+password)
cursor = cnxn.cursor()

[由于@GordThompson 没有将其发布为答案,因此我将其放在这里并关闭它。
感谢@GordThompson ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多