【发布时间】: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.ini和odbcinst.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