在Python中连接到Microsoft SQL Server

dbf7pr2w  于 2022-12-17  发布在  Python
关注(0)|答案(2)|浏览(197)

我目前遇到了无法通过python连接到Microsoft SQL Server数据库的问题,而我可以通过Tableau连接到该数据库。我正在尝试跟踪一些历史数据,这些数据无法在未来几年保留在我们的数据库中。这使用了Windows身份验证,我已经确认它可以从我的本地计算机连接到Tableau中的服务器。但是,我不确定Tableau使用什么驱动程序来建立此连接。我曾尝试在Tableau中通过ODBC连接,但遇到了与在python中相同的问题。

import pyodbc
   cnxn_write = pyodbc.connect(driver='{SQL Server}',
                            server='FQDN, Port Number\SQLEXPRESS',
                            database='DataAnalytics',
                            trusted_connection='yes'
                           )

返回以下错误代码

---------------------------------------------------------------------------
OperationalError                          Traceback (most recent call last)
C:\Users\User\AppData\Local\Temp/ipykernel_6969/555555555.py in <module>
      3 import pyodbc
      4 import date
time
----> 5 cnxn_write = pyodbc.connect(driver='{SQL Server}',
      6                             server='server-name\SQLEXPRESS',
      7                             database='DataAnalytics',

OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC SQL Server Driver]Login timeout expired (0) (SQLDriverConnect)')

下面的代码返回相同的错误。

import pyodbc
    cnxn_write = pyodbc.connect(driver='{SQL Server}',
                            server='FQDN, Port Number',
                            database='DataAnalytics',
                            trusted_connection='yes'
                           )

有人知道我应该使用什么驱动程序来尝试连接此数据库吗?我已经尝试了{SQL Server}和{ODBC Driver 17 for SQL Server}。或者这更可能是在服务器端而不是在我端?
谢谢大家!

nkcskrwz

nkcskrwz1#

因此,如果其他人在将来遇到此问题,pyodbc没有正确连接到驱动程序ODBC Driver 17 for SQL Server。我的修复方法是在运行Windows可执行文件odbcad32.exe后创建一个用户DSN。它正确标识了数据库的服务器、凭据和镜像服务器。我将此用户DSN命名为“sqlexpress”,下面是我现在的连接字符串。

cnxn_write = pyodbc.connect(r'DSN=sqlexpress')

可悲的是,这感觉更像是一种变通方法,而不是解决方案,但它现在正确地连接到我的数据库。

w6lpcovy

w6lpcovy2#

我也遇到过同样的问题,但这对我很有效。我使用mssql

import pymssql  
conn = pymssql.connect(server='host:port', user='user', password='pass', database ='database')

%%

cursor = conn.cursor()  
cursor.execute('SELECT TOP 10 * from table;')  
row = cursor.fetchone()  
while row:  
    print(str(row[0]) + " " + str(row[1]) + " " + str(row[2]))     
    row = cursor.fetchone()

相关问题