Langkah 3: Bukti konsep yang menyambungkan ke SQL menggunakan pyodbc
Contoh bukti konsep ini menggunakan pyodbc
untuk menyambungkan ke database SQL. Sampel ini mengasumsikan bahwa Anda menggunakan database sampel AdventureWorksLT.
Catatan
Contoh ini harus dianggap sebagai bukti konsep saja. Kode sampel disederhanakan untuk kejelasan, dan tidak selalu mewakili praktik terbaik yang direkomendasikan oleh Microsoft.
Prasyarat
- Python 3
- Jika Anda belum memiliki Python, instal manajer paket Python runtime dan Python Package Index (PyPI) dari python.org.
- Lebih suka tidak menggunakan lingkungan Anda sendiri? Buka sebagai devcontainer menggunakan GitHub Codespaces.
pyodbc
paket dari PyPI.- Menginstal Microsoft ODBC Driver 18 untuk SQL Server
- Database dan kredensial SQL.
Koneksi dan data kueri
Koneksi ke database menggunakan kredensial Anda.
Buat file baru bernama app.py.
Tambahkan docstring modul.
""" Connects to a SQL database using pyodbc """
Impor paket
pyodbc
.import pyodbc
Buat variabel untuk kredensial koneksi Anda.
SERVER = '<server-address>' DATABASE = '<database-name>' USERNAME = '<username>' PASSWORD = '<password>'
Buat variabel string koneksi menggunakan interpolasi string.
connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
pyodbc.connect
Gunakan fungsi untuk menyambungkan ke database SQL.conn = pyodbc.connect(connectionString)
Menjalankan kueri
Gunakan string kueri SQL untuk menjalankan kueri dan mengurai hasilnya.
Buat variabel untuk string kueri SQL.
SQL_QUERY = """ SELECT TOP 5 c.CustomerID, c.CompanyName, COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC; """
Gunakan
cursor.execute
untuk mengambil kumpulan hasil dari kueri terhadap database.cursor = conn.cursor() cursor.execute(SQL_QUERY)
Catatan
Fungsi ini pada dasarnya menerima kueri apa pun dan mengembalikan kumpulan hasil, yang dapat diulang dengan penggunaan cursor.fetchone().
Gunakan
cursor.fetchall
dengan perulanganforeach
untuk mendapatkan semua rekaman dari database. Kemudian cetak rekaman.records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
Simpan file app.py.
Buka terminal dan uji aplikasi.
python app.py
29485 1 Professional Sales and Service 29531 1 Remarkable Bike Store 29546 1 Bulk Discount Store 29568 1 Coalition Bike Company 29584 1 Futuristic Bikes
Menyisipkan baris sebagai transaksi
Dalam contoh ini, Anda menjalankan INSERT
pernyataan dengan aman dan meneruskan parameter. Meneruskan parameter sebagai nilai melindungi aplikasi Anda dari serangan injeksi SQL.
Impor
randrange
darirandom
pustaka.from random import randrange
Hasilkan nomor produk acak.
productNumber = randrange(1000)
Tip
Menghasilkan nomor produk acak di sini memastikan bahwa Anda dapat menjalankan sampel ini beberapa kali.
Buat string pernyataan SQL.
SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP) """
Jalankan pernyataan menggunakan
cursor.execute
.cursor.execute( SQL_STATEMENT, f'Example Product {productNumber}', f'EXAMPLE-{productNumber}', 100, 200 )
Ambil kolom pertama dari satu hasil menggunakan
cursor.fetchval
, cetak pengidentifikasi unik hasil, lalu lakukan operasi sebagai transaksi menggunakanconnection.commit
.resultId = cursor.fetchval() print(f"Inserted Product ID : {resultId}") conn.commit()
Tip
Secara opsional, Anda dapat menggunakan
connection.rollback
untuk memutar kembali transaksi.Tutup kursor dan koneksi menggunakan
cursor.close
danconnection.close
.cursor.close() conn.close()
Simpan file app.py dan uji aplikasi lagi
python app.py
Inserted Product ID : 1001
Langkah berikutnya
Pusat Pengembang Python.