पायथन का उपयोग करके 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 सर्वर} में बदलने की कोशिश की है और SAS से पहले ODBC लिंक का उपयोग करके कनेक्ट किया है, जो आंशिक रूप से मेरा उपरोक्त कोड पर आधारित है, इसलिए मुझे नहीं लगता कि मुझे कुछ और स्थापित करने की आवश्यकता है।

pyodbc.Error: ('IM002', '[IM002] [unixODBC] [चालक प्रबंधक] डेटा स्रोत नाम नहीं मिला, और कोई डिफ़ॉल्ट ड्राइवर निर्दिष्ट नहीं किया गया (0) (SQLDriverConnect)')

Pyodbc - "डेटा स्रोत नाम नहीं मिला, और कोई डिफ़ॉल्ट ड्राइवर निर्दिष्ट नहीं है"

धन्यवाद

जवाबों:


144

यह मेरा इसे करने का तरीका है...

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

प्रासंगिक संसाधन:


60

पहले जो कहा गया है उसके अलावा मामूली। आप संभवतः एक डेटाफ़्रेम वापस करना चाहते हैं। ऐसा ही किया जाएगा

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

एक ग्राहक और सर्वर के बीच डेटा स्रोत कनेक्शन में दो सामान्य प्रकार होते हैं: ODBC जो DRIVER और OLEDB का उपयोग करता है जो एक PROIDIDER का उपयोग करता है। और प्रोग्रामिंग दुनिया में, यह एक नियमित बहस है कि डेटा स्रोतों से जुड़ने के लिए किस मार्ग पर जाना है।

आप एक प्रदाता का उपयोग कर रहे हैं SQLOLEDB, लेकिन इसे एक ड्राइवर के रूप में निर्दिष्ट कर रहे हैं । जहाँ तक मुझे पता है, न तो pyodbc और न ही pyyodbc मॉड्यूल विंडो 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 (...) से छुटकारा पाना था और चर को उचित स्थानों पर रखना था। प्रारूप क्या करना था?
क्रिस्टोफर एल

1
adodbapiOLEDB कनेक्शन का उपयोग करने के लिए आपको इंस्टॉल करना होगा। और स्ट्रिंग प्रारूप +ऑपरेटर का उपयोग करने के बजाय एक चर में चर को पारित करने के लिए अनुशंसित तरीका है । संख्याओं के साथ घुंघराले ब्रेसिज़ प्लेसहोल्डर हैं जो format()तदनुसार भरते हैं। तुम भी सूचियों और tuples का उपयोग कर में पारित कर सकते हैं format()। आपका मूल कोड स्ट्रिंग और वेरिएबल्स को उद्धरण द्वारा नहीं तोड़ता है, इसलिए +स्ट्रिंग का हिस्सा माना जाता था।
Parfait

4
जबकि यह उत्तर बहुत अच्छा है और मुझे इस मुद्दे को हल करने में मदद मिली। जो कोई भी ऐसा करने की कोशिश कर रहा है उसे याद रखें कि यदि आप विश्वसनीय कनेक्शन सेट करते हैं तो आपको एक अपवाद मिल सकता है = हाँ और उसी कनेक्शन स्ट्रिंग में UID / pwd दर्ज करें। यह या तो / या संयोजन है और जब आप विश्वसनीय कनेक्शन का उपयोग करते हैं तो आपका NT / सिस्टम क्रेडेंशियल प्रमाणीकरण के लिए उपयोग किया जाता है, भले ही आप स्पष्ट रूप से UID / PWD का उल्लेख कर रहे हों।
S4nd33p

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
पाब्लो ईएम

परंतु! अगस्त 2020 तक इसका मूल्यह्रास नहीं हुआ है। आप देख सकते हैं कि रेपो फिर से सक्रिय है: github.com/pymssql/pymssql
deweydb


4

Pytds का उपयोग करने का प्रयास करें, यह pyodbcसेटअप की तुलना में अधिक जटिल वातावरण में काम करता है और सेटअप करने में अधिक आसान है।

मैंने इसे उबंटू 18.04 पर काम किया

Ref: 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
धन्यवाद। बिना किसी जटिल सेटअप के आकर्षण की तरह काम करता है।
शुभम पटेल

3

पायथन कोड के बाद मेरे लिए काम किया। 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 ड्राइवर

सभी आवश्यक शर्तों और कोड उदाहरण सहित इन दो विकल्पों की व्याख्या की गई है: पायथन एसक्यूएल ड्राइवर - पायोडबक (परीक्षण किया गया और काम कर रहा) पायथन एसक्यूएल चालक - जिमसक्कल


हाय - स्टैक ओवरफ्लो में आपका स्वागत है - आपको कुछ विचारों (इस मामले में नए विचारों) के साथ प्रश्न को संबोधित करने का लक्ष्य रखना चाहिए - कुछ आपके अपने कोड या एक नया दृष्टिकोण। फिर अधिक सहायता प्रदान करने या अपने समाधान का बैकअप लेने के लिए कुछ लिंक का उपयोग करें। आपको बस कुछ लिंक पोस्ट नहीं करना चाहिए।
एलेक्स लियो

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 सर्वर को जोड़ने की कोशिश की और जो मेरे लिए काम करते हैं।

विंडोज़ प्रमाणीकरण का उपयोग करके कनेक्ट करने के लिए

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.)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.