使用Python连接到Microsoft SQL Server

Chr*_*Ell 75 python sql windows

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

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

并得到以下错误

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)')
Run Code Online (Sandbox Code Playgroud)

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

pyodbc.Error:('IM002','[IM002] [unixODBC] [驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序(0)(SQLDriverConnect)')

Pyodbc - "未找到数据源名称,并且未指定默认驱动程序"

谢谢

ASH*_*ASH 123

我就是这样做的......

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,))
Run Code Online (Sandbox Code Playgroud)

相关来源:

  • 在不久的将来,现在应该是 `pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server.lan,1433;DATABASE=database;UID=user;PWD=pass'); ` 按照这些说明(或其非 Linux 版本)进行操作后 https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql -server?view=sql-server-ver15 (2认同)

Kei*_*ith 48

对之前所说过的一点点补充.您可能想要返回一个数据帧.这将完成为

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)
Run Code Online (Sandbox Code Playgroud)


Par*_*ait 33

在客户端和服务器之间的数据源连接中,有两种常规类型:使用DRIVER的ODBC和使用PROVIDER的OLEDB.在编程世界中,关于连接数据源的路线是一个经常性的争论.

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

以下是连接参数的两种方法.另外,我对你的变量进行字符串格式化,因为你的连接没有正确地破坏字符串中的引号.您会注意到我将花括号加倍,因为它在连接字符串中是必需的并且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()
Run Code Online (Sandbox Code Playgroud)

  • 虽然这个答案很棒,但帮助我解决了问题.如果您设置了trusted connection = yes并在同一个连接字符串中输入UID/pwd,那么无论谁想要这样做,都会记住您可能会遇到异常.这是一个/或组合&当您使用可信连接时,即使您明确提到UID/PWD,您的NT /系统凭证也会用于身份验证. (4认同)

小智 14

我喜欢这种方式......它更容易

http://www.pymssql.org/en/stable/pymssql_examples.html

conn = pymssql.connect("192.168.10.198", "odoo", "secret", "EFACTURA")
cursor = conn.cursor()
cursor.execute('SELECT * FROM usuario')
Run Code Online (Sandbox Code Playgroud)

  • 但!自 2020 年 8 月起不再折旧。您可以看到存储库再次处于活动状态:https://github.com/pymssql/pymssql (5认同)
  • 该项目已停止:https://github.com/pymssql/pymssql (3认同)

小智 7

这是一些新手的照片。

在此处输入图片说明


LCJ*_*LCJ 6

以下 Python 代码对我有用。为了检查 ODBC 连接,我首先创建了一个 4 行 C# 控制台应用程序,如下所示。

Python代码

import pandas as pd
import pyodbc 
cnxn = pyodbc.connect("Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=My_DW;")
df = pd.read_sql_query('select TOP 10 * from dbo.Table WHERE Patient_Key > 1000', cnxn)
df.head()
Run Code Online (Sandbox Code Playgroud)

调用存储过程

 dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] )
Run Code Online (Sandbox Code Playgroud)

用于检查 ODBC 连接的 C# 程序

    static void Main(string[] args)
    {
        string connectionString = "Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=My_DW;";
        OdbcConnection cn = new OdbcConnection(connectionString);
        cn.Open();
        cn.Close();
    }
Run Code Online (Sandbox Code Playgroud)


Alf*_*ang 5

尝试使用 pytds,它可以在更复杂的环境中工作,pyodbc并且更容易设置。

我让它在 Ubuntu 18.04 上运行

参考:https : //github.com/denisenkom/pytds

文档中的示例代码:

import pytds
with pytds.connect('server', 'database', 'user', 'password') as conn:
    with conn.cursor() as cur:
        cur.execute("select 1")
        cur.fetchall()
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。无需任何复杂的设置即可发挥作用。 (3认同)
  • 我花了很长时间尝试让 `pyodbc` 和 `pymssql` 在 M1 MacBook Pro 上工作,但仍然失败。`pytds` 直接起作用!感谢分享! (2认同)