使用Python连接到Microsoft SQL server

2024-04-19 17:56:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过python连接到SQL,以便在Microsoft SQL server上的一些SQL数据库上运行一些查询。从我在网上和这个论坛上的研究来看,最有前途的图书馆似乎是pyodbc。所以我做了以下代码

import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; 
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()

并得到以下错误

Traceback (most recent call last):
  File "C:\Users...\scrap.py", line 3, in <module>
    conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true")
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

我看了下面的帖子,并尝试将驱动程序更改为{sql server},并且之前在SAS中使用ODBC链接进行了连接,这部分是我上面的代码所基于的,因此不需要安装其他任何东西。

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

Pyodbc - "Data source name not found, and no default driver specified"

谢谢


Tags: andnonamedefaultsourcesqldataserver
3条回答

在客户端和服务器之间的数据源连接中,通常有两种类型:使用驱动程序的ODBC和使用提供程序的OLEDB。而在编程世界中,连接到数据源的路径是一个regular debate问题。

您正在使用提供程序SQLOLEDB,但将其指定为驱动程序。据我所知,pyodbc和pypyodbc模块都不支持Window OLEDB连接。但是,adodbapi使用Microsoft ADO作为底层组件。

下面是连接参数的两种方法。另外,我string format您的变量作为连接没有在字符串中正确打断引号。您会注意到我将大括号加倍,因为它在连接字符串中是必需的,string.format()也使用它。

# PROVIDER
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
       trusted_connection=yes;UID={2};PWD={3};".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()

# DRIVER
import pyodbc
conn = pyodbc.connect("DRIVER={{SQL Server}};SERVER={0}; database={1}; \
       trusted_connection=yes;UID={2};PWD={3}".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()

对之前所说的话稍加补充。您可能想要返回一个数据帧。这将作为

import pypyodbc 
import pandas as pd

cnxn = pypyodbc.connect("Driver={SQL Server Native Client 11.0};"
                        "Server=server_name;"
                        "Database=db_name;"
                        "uid=User;pwd=password")
df = pd.read_sql_query('select * from table', cnxn)

我就是这样做的。。。

import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
                      "Server=server_name;"
                      "Database=db_name;"
                      "Trusted_Connection=yes;")


cursor = cnxn.cursor()
cursor.execute('SELECT * FROM Table')

for row in cursor:
    print('row = %r' % (row,))

相关资源:

相关问题 更多 >