Bagikan melalui


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

Koneksi dan data kueri

Koneksi ke database menggunakan kredensial Anda.

  1. Buat file baru bernama app.py.

  2. Tambahkan docstring modul.

    """
    Connects to a SQL database using pyodbc
    """
    
  3. Impor paket pyodbc.

    import pyodbc
    
  4. Buat variabel untuk kredensial koneksi Anda.

    SERVER = '<server-address>'
    DATABASE = '<database-name>'
    USERNAME = '<username>'
    PASSWORD = '<password>'
    
  5. Buat variabel string koneksi menggunakan interpolasi string.

    connectionString = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'
    
  6. 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.

  1. 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;
    """
    
  2. 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().

  3. Gunakan cursor.fetchall dengan perulangan foreach 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}")
    
  4. Simpan file app.py.

  5. 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.

  1. Impor randrange dari random pustaka.

    from random import randrange
    
  2. Hasilkan nomor produk acak.

    productNumber = randrange(1000)
    

    Tip

    Menghasilkan nomor produk acak di sini memastikan bahwa Anda dapat menjalankan sampel ini beberapa kali.

  3. Buat string pernyataan SQL.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name, 
    ProductNumber, 
    StandardCost, 
    ListPrice, 
    SellStartDate
    ) OUTPUT INSERTED.ProductID 
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Jalankan pernyataan menggunakan cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        f'Example Product {productNumber}', 
        f'EXAMPLE-{productNumber}', 
        100,
        200
    )
    
  5. Ambil kolom pertama dari satu hasil menggunakan cursor.fetchval, cetak pengidentifikasi unik hasil, lalu lakukan operasi sebagai transaksi menggunakan connection.commit.

    resultId = cursor.fetchval()
    print(f"Inserted Product ID : {resultId}")
    conn.commit()
    

    Tip

    Secara opsional, Anda dapat menggunakan connection.rollback untuk memutar kembali transaksi.

  6. Tutup kursor dan koneksi menggunakan cursor.close dan connection.close.

    cursor.close()
    conn.close()
    
  7. Simpan file app.py dan uji aplikasi lagi

    python app.py
    
    Inserted Product ID : 1001
    

Langkah berikutnya

Pusat Pengembang Python.