Mengotomatiskan proses backend di instans SQL Server Anda adalah tugas umum. Baik itu menyegarkan statistik, membangun kembali indeks, membaca, atau menghapus data, sangat berharga untuk mengintegrasikan kerangka kerja pemrograman lain dengan RDBMS Anda. Artikel ini akan mempertimbangkan jenis tugas ini yang secara khusus terintegrasi dengan Python.
Kami tidak akan fokus pada pertanyaan mendasar seperti apa itu SQL dan Python, atau bagaimana dan di mana kami menggunakannya. Sebagai gantinya, kita akan memeriksa kasus spesifik yang memerlukan penggabungan SQL dan Python, dan berbagai modul metode yang tersedia untuk melakukannya.
String Koneksi SQL Server
Sebelum kita mulai menjelajahi kasus koneksi Python ke SQL server, mari kita kenali dasar-dasarnya.
String koneksi mewakili bagian data yang diperlukan yang mengarah ke dan mengotentikasi instans database Anda. Mungkin ada sedikit perbedaan untuk setiap jenis instans database, tetapi secara umum, informasi yang diperlukan adalah nama server, driver database, nama pengguna, sandi, dan nomor port.
Detail Instance SQL Server
Detail string koneksi ini akan sama seperti saat Anda terhubung melalui SSMS ke instans database. Catat instance database {SERVER}\{INSTANCE} format – ini dia DESKTOP-6L1B155\FogelDev . Dimungkinkan juga untuk terhubung ke nama server jika Anda hanya memiliki satu instance default yang berjalan.
Database SQL Server dan Tabel kode pembuatan
Pertama, kita membutuhkan database dengan struktur tabel yang diperlukan untuk bekerja dengan Python dan SQL Server. Skrip berikut akan membuat database seperti itu dan satu tabel di dalamnya. Tabel tersebut akan berfungsi sebagai area demonstrasi bagi kita untuk melihat bagaimana menggunakan SQL dan Python bersama-sama.
CREATE DATABASE CODESIGHT_DEMOS;
USE CODESIGHT_DEMOS;
CREATE TABLE POSTS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
NAME VARCHAR(200),
Author VARCHAR(100),
URL VARCHAR(100),
DATE DATE
)
INSERT INTO POSTS
VALUES('Properly Dealing with Encryption of Databases in an AlwaysOn Availability Group Scenario','Alejandro Cobar','https://codingsight.com/encryption-of-databases-in-alwayson-availability-group-scenario/','4/23/2021')
INSERT INTO POSTS
VALUES('An Overview of DataFrames in Python','Aveek Das','https://codingsight.com/an-overview-of-dataframes-in-python/','4/23/2021')
INSERT INTO POSTS
VALUES('SQL Server Business Intelligence (BI) – Traditional Tools and Technologies','Haroon Ashraf','https://codingsight.com/sql-server-business-intelligence-bi-tools-and-technologies/','4/19/2021')
Modul Python
Tujuan kami sekarang adalah untuk menentukan bagaimana menghubungkan Python ke SQL server instance. Beberapa modul Python tersedia untuk melakukan tugas ini, dan dua di antaranya adalah yang utama. Kami akan berurusan dengan PYODC dan SQLAlchemy . Modul-modul ini menangani bagian koneksi dari operasi.
Kode tambahan diperlukan untuk membaca data dari tabel SQL Server ke dalam memori. Di sinilah Panda perpustakaan masuk.
Panda dapat diintegrasikan secara erat dengan SQLALchemy untuk membaca data langsung ke DataFrame objek (dalam penyimpanan berbasis array memori yang dapat beroperasi secepat kilat dan terlihat seperti tabel database).
Mari kita lihat beberapa contoh string koneksi.
Contoh pertama menggunakan SQL Server dan contoh dari tangkapan layar sebelumnya. Anda dapat mengatur variabel-variabel ini ke dalam detail spesifik Anda untuk membuat koneksi.
Perhatikan juga bahwa koneksi khusus ini menggunakan otentikasi Windows. Oleh karena itu, ia akan mencoba untuk mengautentikasi sebagai pengguna dari mesin Windows saya yang saya masuki. Jika tidak ada nama pengguna dan kata sandi yang ditentukan, ini adalah perilaku default dalam string koneksi.
- Nama Server =‘DESKTOP-6L1B155’
- Nama Instance ='FogelDev'
- Nama database =‘CODESIGHT_DEMOS’
- Nomor port ='1433'
print("mssql+pyodbc://@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))
Kami dapat menguji apakah koneksi ini berfungsi dengan benar dengan menjalankan kueri dengan Pandas. Itu harus membaca kueri dari string koneksi menggunakan read_sql_query perintah.
df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df
Otentikasi SQL Server
Bagaimana jika Anda perlu menggunakan string koneksi berbasis otentikasi server SQL untuk terhubung ke SQL Server Anda? Kami dapat menyesuaikan kode Python kami untuk menambahkan nama pengguna dan kata sandi ke SQLALchemy mesin.
- Nama Server =‘DESKTOP-6L1B155’
- Nama Instance =‘FogelDev’
- Databasename =‘CODESIGHT_DEMOS’
- Nomor port ='1433'
- Nama Pengguna ='CodingSightUser'
- Kata Sandi ='Kata Sandi123'
print("mssql+pyodbc://{USER}:{PASS}@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://{USER}:{PASS}@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
Sekali lagi, kami menguji koneksi kami, tetapi kali ini kami memilih 1 record dari tabel saja.
df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df
Menulis Data
Terakhir, lihat cara memasukkan data Python ke tabel database SQL Server kami. Kami membuat objek Dataframe dan menambahkannya ke tabel.
Metode Dataframe:
newdata = [{'Name': 'How to Create the Date Table in Power BI', 'Author': 'Haroon Ashraf', 'URL':'https://codingsight.com/how-to-create-date-table-in-power-bi/', 'Date':'4/21/21'}]
load_df = pd.DataFrame(newdata)
load_df.to_sql("POSTS", MSSQLengine, if_exists='append',index = False, chunksize = 200)
Metode lain adalah memasukkan data langsung ke dalam tabel dengan perintah eksekusi.
Metode Jalankan:
MSSQLengine.execute("INSERT INTO [POSTS] VALUES('SQL Query Optimization: 5 Core Facts to Boost Queries','Edwin Sanchez','https://codingsight.com/sql-query-optimization-5-core-facts-to-boost-queries/','3/31/21')");
Setelah selesai, tabel akhir terlihat sebagai berikut. Ini memiliki 3 baris pertama yang dimuat oleh skrip pembuatan SQL Server awal, dan baris 4 dan 5 dimuat oleh Python.
Ringkasan
Posting ini menyoroti parameter string koneksi untuk menghubungkan kode Python dengan SQL Server. Kami memeriksa membaca data dari SQL Server dan memeriksa dua metode otentikasi yang berbeda – kasus spesifik Python terhubung ke SQL server Windows otentikasi dan otentikasi SQL server standar. Selain itu, kami meninjau metode untuk memuat data, salah satunya melibatkan penggunaan objek DataFrame dengan Python, dan metode lainnya adalah perintah SQL INSERT mentah.