我目前遇到了无法通过 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}。或者这更有可能发生在服务器端而不是我这边?
谢谢大家!
以防万一其他人将来遇到这个问题。 pyodbc 未正确连接到 SQL Server 驱动程序 ODBC Driver 17。我的修复方法是在运行 Windows 可执行文件 odbcad32.exe 后创建用户 DSN。这正确地识别了数据库的服务器、凭据和镜像服务器。我将此用户 DSN 称为“sqlexpress”,以下是我现在的连接字符串。
cnxn_write = pyodbc.connect(r'DSN=sqlexpress')
遗憾的是,这感觉更像是一种解决方法,而不是解决方案,但它现在可以正确连接到我的数据库。
我也遇到了同样的问题,但这对我有用。我用的是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()
我还使用了“pyodbc”,并在 Tableau 中使用了 Python 和 Python。当您在登录时遇到超时错误时,我认为问题可能是您没有指定要在连接字符串中使用的凭据。
试试这个
import pyodbc
import pandas as pd
server = 'your_server'
database = 'your_database'
username = 'your_username'
password = 'your_password'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
查询1
#Sample select query number 1
cursor.execute("SELECT @@version;")
row = cursor.fetchone()
while row:
print(row[0])
row = cursor.fetchone()
查询2
#Sample select query number 2
sql='''SELECT [RECORDID],[USERID],[COMMENT] FROM [dbo].[MyTable];'''
data = pd.read_sql(sql,cnxn)
data.head()
它对你有用吗?