পাইথন ব্যবহার করে মাইক্রোসফ্ট এসকিউএল সার্ভারের সাথে সংযোগ স্থাপন করা হচ্ছে


97

মাইক্রোসফ্ট এসকিউএল সার্ভারে কিছু এসকিউএল ডাটাবেসে কিছু প্রশ্ন চালাতে আমি পাইথনের মাধ্যমে এসকিউএল সংযোগ করার চেষ্টা করছি। আমার গবেষণা থেকে অনলাইন এবং এই ফোরামে সর্বাধিক প্রতিশ্রুতিবদ্ধ গ্রন্থাগারটি পাইডবিসি বলে মনে হচ্ছে। সুতরাং আমি নিম্নলিখিত কোড তৈরি করেছি

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

আমি ফলোভিং পোস্টগুলি দেখেছি এবং আমার ড্রাইভারটিকে {স্কিএল সার্ভারে পরিবর্তিত করার চেষ্টা করেছি এবং এসএএস-এর আগে ওডিবিসি লিঙ্কগুলি ব্যবহার করে সংযুক্ত করেছি, যা আমার উপরের কোডটির ভিত্তিতে আংশিক, তাই আমাকে অন্য কিছু ইনস্টল করার প্রয়োজন মনে করবেন না।

পাইডবিসি.এরর: ('IM002', '[IM002] [ইউনিক্সডোবিসি] [ড্রাইভার ম্যানেজার] ডেটা উত্সের নাম খুঁজে পাওয়া যায় নি এবং কোনও ডিফল্ট ড্রাইভার নির্দিষ্ট করা হয়নি (0) (এসকিউএলড্রাইভার সংযোগ)')

পাইডবিসি - "ডেটা উত্সের নাম পাওয়া যায় নি, এবং কোনও ডিফল্ট ড্রাইভার নির্দিষ্ট করা নেই"

ধন্যবাদ

উত্তর:


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

প্রাসঙ্গিক সংস্থানসমূহ:


63

এর আগে যা বলা হয়েছে তার সাথে গৌণ সংযোজন। আপনি সম্ভবত কোনও ডেটা ফ্রেম ফিরিয়ে দিতে চান। এটি হিসাবে করা হবে

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

ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা উত্স সংযোগগুলিতে দুটি সাধারণ প্রকার রয়েছে: ওডিবিসি যা একটি চালক এবং ওএইলডিবি ব্যবহার করে যা একটি প্রভিডার ব্যবহার করে। এবং প্রোগ্রামিং বিশ্বে, ডেটা উত্সগুলির সাথে সংযোগ স্থাপনে কোন রুটে যেতে হবে তা নিয়মিত বিতর্ক

আপনি একটি সরবরাহকারী ব্যবহার করছেন SQLOLEDB, তবে এটি ড্রাইভার হিসাবে নির্দিষ্ট করছেন। যতদূর আমি জানি, পাইওডবিসি বা পাইপাইডবিসি মডিউলগুলি উইন্ডো OLEDB সংযোগগুলিকে সমর্থন করে না। তবে অ্যাডোডাপি মাইক্রোসফ্ট এডিওকে অন্তর্নিহিত উপাদান হিসাবে ব্যবহার করে।

আপনার সংযোগের পরামিতিগুলির জন্য উভয় পদ্ধতির নীচে। এছাড়াও, আমি আপনার ভেরিয়েবলগুলির স্ট্রিংটি ফর্ম্যাট করি কারণ আপনার যুক্তি স্ট্রিংয়ের মধ্যে কোটগুলি যথাযথভাবে ভাঙ্গেনি। আপনি লক্ষ্য করবেন যে আমি কোঁকড়া ধনুর্বন্ধনীগুলি দ্বিগুণ করেছি যেহেতু এটি সংযোগ স্ট্রিংয়ে প্রয়োজনীয় এবং 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()

ব্যাখ্যা এবং কোডের জন্য ধন্যবাদ আমি ড্রাইভারকে কাজ করতে পেলাম। যদিও আমাকে। ফর্ম্যাট (...) থেকে মুক্তি পেয়ে ভেরিয়েবলগুলি যথাযথ জায়গায় রেখে দিতে হয়েছিল। ফর্ম্যাটটি বলতে কী বোঝায়?
ক্রিস্টোফার এল

4
adodbapiOLEDB সংযোগটি ব্যবহার করার জন্য আপনাকে ইনস্টল করতে হবে। স্ট্রিং ফর্ম্যাট হ'ল +অপারেটরটি ব্যবহার না করে স্ট্রিংয়ে ভেরিয়েবলগুলি পাস করার প্রস্তাবিত উপায় । সংখ্যাযুক্ত কোঁকড়া ধনুর্বন্ধনী format()হ'ল স্থানধারক যা অনুসারে পূরণ করে। এমনকি আপনি ব্যবহার করে তালিকাগুলি এবং টিপলগুলিতেও পাস করতে পারেন format()। আপনার মূল কোডটি উদ্ধৃতি দ্বারা স্ট্রিং এবং ভেরিয়েবলগুলি ভাঙ্গেনি, তাই +স্ট্রিংয়ের অংশ হিসাবে বিবেচিত।
পারফাইট

4
যদিও এই উত্তরটি দুর্দান্ত এবং আমাকে সমস্যার সমাধান করতে সহায়তা করেছে। যে কেউ এটি করার চেষ্টা করছেন মনে রাখবেন আপনি যদি নির্ভরযোগ্য সংযোগ = হ্যাঁ সেট করে থাকেন এবং একই সংযোগের স্ট্রিংয়ে ইউআইডি / পিডাব্লুডিতে প্রবেশ করেন তবে আপনি ব্যতিক্রম পেতে পারেন। এটি হ'ল একটি / বা সংমিশ্রণ এবং যখন আপনি বিশ্বস্ত সংযোগ ব্যবহার করেন আপনার এনটি / সিস্টেম শংসাপত্র প্রমাণীকরণের জন্য ব্যবহৃত হয় এমনকি আপনি স্পষ্টভাবে ইউআইডি / পিডাব্লুডি উল্লেখ করছেন mentioning
S4nd33p

15

আমি এইভাবে পছন্দ করি ... এটি অনেক সহজ ছিল

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

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

4
এই প্রকল্পটি বন্ধ করা হয়েছে: github.com/pymssql/pymssql
পাবলো ইএম

4
কিন্তু! আগস্ট 2020 পর্যন্ত এটি আর অবচয় করা হয় না। আপনি দেখতে পাচ্ছেন যে রেপো আবার সক্রিয় রয়েছে: github.com/pymssql/pymssql
deweydb


4

পাইটড ব্যবহার করার চেষ্টা করুন, এটি pyodbcসেটআপের চেয়ে আরও জটিল জটিল পরিবেশে কাজ করে ।

আমি এটি উবুন্টু 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()

4
ধন্যবাদ. কোনও জটিল সেটআপ ব্যতীত কবজির মতো কাজ করে।
শুভম প্যাটেল

3

পাইথন কোড অনুসরণ করা আমার পক্ষে কাজ করেছিল। ওডিবিসি সংযোগটি পরীক্ষা করতে, আমি নীচে তালিকাভুক্ত হিসাবে প্রথমে একটি 4 লাইন সি # কনসোল অ্যাপ্লিকেশন তৈরি করেছি।

পাইথন কোড

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

ওডিবিসি সংযোগ পরীক্ষা করার জন্য সি # প্রোগ্রাম

    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

একটি বিকল্প পদ্ধতির হবে ইনস্টল মাইক্রোসফট 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

আমি এখানে আপ টু ডেট সংস্থান পেয়েছি: মাইক্রোসফ্ট | এসকিউএল ডক্স | পাইথন এসকিউএল ড্রাইভার

প্রয়োজনীয় সমস্ত পূর্বশর্ত এবং কোড উদাহরণ সহ এই দুটি অপশন ব্যাখ্যা করা আছে: পাইথন এসকিউএল ড্রাইভার - পাইডবিসি (পরীক্ষিত ও কর্মরত) পাইথন এসকিউএল ড্রাইভার - পাইমসকিএল


হাই - স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম - আপনার উদ্দেশ্যটি কিছু ধারণা (এই ক্ষেত্রে নতুন ধারণা) দিয়ে সমাধান করা উচিত - আপনার নিজের কোড বা একটি নতুন পদ্ধতির কিছু। তারপরে আরও সহায়তা সরবরাহ করতে বা আপনার সমাধানটি ব্যাক আপ করার জন্য কিছু লিঙ্ক ব্যবহার করুন। আপনার কিছু লিঙ্ক পোস্ট করা উচিত নয়।
অ্যালেক্স লিও

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

আমি নিম্নলিখিত উপায়ে এসকিএল সার্ভারকে সংযুক্ত করার চেষ্টা করেছি এবং যারা আমার পক্ষে কাজ করেছেন।

উইন্ডোজ প্রমাণীকরণ ব্যবহার করে সংযোগ করতে

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 সার্ভার প্রমাণীকরণ ব্যবহার করতে আমি নিম্নলিখিত কোড ব্যবহার করেছি used

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.