Python을 사용하여 Microsoft SQL 서버에 연결


97

Microsoft SQL 서버의 일부 SQL 데이터베이스에서 일부 쿼리를 실행하기 위해 Python을 통해 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] [드라이버 관리자] 데이터 원본 이름을 찾을 수 없으며 기본 드라이버가 지정되지 않았습니다 (0) (SQLDriverConnect)').

Pyodbc- "데이터 소스 이름을 찾을 수 없으며 기본 드라이버가 지정되지 않았습니다."

감사

답변:


145

이게 내가하는 방법 ...

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,))

관련 리소스 :


61

이전에 말한 내용에 약간의 추가. 데이터 프레임을 반환하고 싶을 것입니다. 이것은 다음과 같이 수행됩니다.

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)

38

클라이언트와 서버 간의 데이터 소스 연결에는 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()

설명과 코드에 감사드립니다. .format (...)을 제거하고 변수를 적절한 위치에 넣어야했지만. 형식은 무엇을 의미 했습니까?
Christopher Ell의

1
adodbapiOLEDB 연결을 사용 하려면 설치해야 합니다. 그리고 문자열 형식은 +연산자를 사용하는 대신 문자열에 변수를 전달하는 데 권장되는 방법 입니다. 숫자가있는 중괄호 format()는 그에 따라 채워지 는 자리 표시 자입니다 . 을 사용하여 목록과 튜플을 전달할 수도 있습니다 format(). 원래 코드는 문자열과 변수를 따옴표로 나누지 않았으므로 문자열의 +일부로 간주되었습니다.
Parfait 2015

4
이 답변은 훌륭하고 문제를 해결하는 데 도움이되었습니다. 이를 수행하려는 사람은 신뢰할 수있는 연결 = yes를 설정하고 동일한 연결 문자열에 UID / pwd를 입력하면 예외가 발생할 수 있음을 기억하십시오. 이것은 둘 중 하나의 조합이며 신뢰할 수있는 연결을 사용할 때 UID / PWD를 명시 적으로 언급하더라도 NT / 시스템 자격 증명이 인증에 사용됩니다.
S4nd33p 2017 년

15

나는이 방법을 선호합니다 ... 훨씬 쉬웠습니다

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')

3
이 프로젝트는 중단되었습니다 : github.com/pymssql/pymssql
Pablo EM

그러나! 2020 년 8 월부터 더 이상 감가 상각되지 않습니다. repo가 ​​다시 활성화 된 것을 볼 수 있습니다 : github.com/pymssql/pymssql
deweydb


4

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()

1
감사합니다. 복잡한 설정없이 매력처럼 작동합니다.
Shubham Patel

3

Python 코드를 따르는 것이 저에게 효과적이었습니다. ODBC 연결을 확인하기 위해 먼저 아래 나열된 4 줄 C # 콘솔 응용 프로그램을 만들었습니다.

파이썬 코드

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

저장 프로 시저 호출

 dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] )

ODBC 연결을 확인하는 C # 프로그램

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

0

다른 방법이 될 것이다 설치 Microsoft ODBC 드라이버 (13), 후 교체 SQLOLEDB와 함께ODBC Driver 13 for SQL Server

문안 인사.


0

나를 위해 일하는 것이 여기 있습니다.

from sqlalchemy import create_engine
import urllib

conn_str = (
r'Driver=ODBC Driver 13 for SQL Server;'
r'Server=DefinitelyNotProd;'
r'Database=PlayPen;'
r'Trusted_Connection=Yes;')

quoted_conn_str = urllib.parse.quote_plus(conn_str)
engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str))

0

여기에서 최신 리소스를 찾았습니다. Microsoft | SQL 문서 | Python SQL 드라이버

필요한 모든 전제 조건과 코드 예제를 포함하여 다음 두 가지 옵션이 설명되어 있습니다. Python SQL 드라이버 -pyodbc (테스트 및 작동 중) Python SQL 드라이버-pymssql


안녕하세요-Stack Overflow에 오신 것을 환영합니다-몇 가지 아이디어 (이 경우에는 새로운 아이디어)로 질문에 답해야합니다.-일부 자체 코드 또는 새로운 접근 방식입니다. 그런 다음 추가 지원을 제공하거나 솔루션을 백업하기 위해 일부 링크를 사용하십시오. 일부 링크 만 게시해서는 안됩니다.
Alex Leo

0

내 버전. 도움이되기를 바랍니다.


import pandas.io.sql
import pyodbc
import sys

server = 'example'
db = 'NORTHWND'
db2 = 'example'

#Crear la conexión
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + server +
                      ';DATABASE=' + db +
                      ';DATABASE=' + db2 +
                      ';Trusted_Connection=yes')
#Query db
sql = """SELECT [EmployeeID]
      ,[LastName]
      ,[FirstName]
      ,[Title]
      ,[TitleOfCourtesy]
      ,[BirthDate]
      ,[HireDate]
      ,[Address]
      ,[City]
      ,[Region]
      ,[PostalCode]
      ,[Country]
      ,[HomePhone]
      ,[Extension]
      ,[Photo]
      ,[Notes]
      ,[ReportsTo]
      ,[PhotoPath]
  FROM [NORTHWND].[dbo].[Employees] """
data_frame = pd.read_sql(sql, conn)
data_frame

0

나는 다음과 같은 방법으로 SQL 서버를 연결하려고 시도했으며 그 방법은 나를 위해 일했습니다.

Windows 인증을 사용하여 연결하려면

import pyodbc

conn = pyodbc.connect('Driver={SQL Server};Server='+servername+';Trusted_Connection=yes;Database='+databasename+';')
cursor = conn.cursor()
cursor.execute("Select 1 as Data")

SQL 서버 인증을 사용하기 위해 다음 코드를 사용했습니다.

import pyodbc

conn = pyodbc.connect('Driver={SQL Server};Server='+servername+  ';UID='+userid+';PWD='+password+';Database='+databasename) 
cursor1 = conn.cursor()
cursor1.execute("SELECT 1 AS DATA")

0

시도해보십시오 pymssql:pip install pymssql

import pymssql

try:
    conn = pymssql.connect(server="host_or_ip", user="your_username", password="your_password", database="your_db")
    cursor = conn.cursor()
    cursor.execute ("SELECT @@VERSION")
    row = cursor.fetchone()
    print(f"\n\nSERVER VERSION:\n\n{row[0]}")
    cursor.close()
    conn.close()
except Exception:
    print("\nERROR: Unable to connect to the server.")
    exit(-1)

산출:

SERVER VERSION:

Microsoft SQL Server 2016 (SP2-CU14) (KB4564903) - 13.0.5830.85 (X64)
        Jul 31 2020 18:47:07
        Copyright (c) Microsoft Corporation
        Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)

연결은 터미널에서를 사용하여 한 줄의 코드로 확인할 수도 있습니다 sqlcmd. 구문을 참조하십시오 .

╔═════════╦═════════════════════════════════════════╗
 Command                Description               
╠═════════╬═════════════════════════════════════════╣
   -S     [protocol:]server[instance_name][,port] 
   -U     login_id                                
   -p     password                                
   -Q     "cmdline query" (and exit)              
╚═════════╩═════════════════════════════════════════╝
sqlcmd -S "host_or_ip"  -U "your_username" -p -Q "SELECT @@VERSION"

산출:

Password:    your_password



--------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2016 (SP2-CU14) (KB4564903) - 13.0.5830.85 (X64) 
        Jul 31 2020 18:47:07 
        Copyright (c) Microsoft Corporation
        Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)


(1 rows affected)

Network packet size (bytes): 4096
1 xact[s]:
Clock Time (ms.): total         1  avg   1.00 (1000.00 xacts per sec.)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.