Rumah >pembangunan bahagian belakang >Tutorial Python >Sambung ke pangkalan data Azure SQL dalam SQL Alchemy menggunakan token ID Entra

Sambung ke pangkalan data Azure SQL dalam SQL Alchemy menggunakan token ID Entra

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 18:46:30945semak imbas

Connect to Azure SQL database in SQL Alchemy using Entra ID tokens

Kami mempunyai aplikasi web di tempat kerja yang perlu disambungkan ke pangkalan data Azure SQL kami untuk tempoh permintaan. Untuk memudahkan pertanyaan pangkalan data, kami menggunakan SQL Alchemy dan pyodbc.

Kami mempunyai beberapa matlamat yang ingin kami capai:

  • Setiap permintaan mendapat sesi tersendiri. Kami mahu membuka sesi baharu apabila permintaan bermula dan menutupnya sebaik sahaja ia selesai.
  • Kami mahu menyambung ke pangkalan data menggunakan identiti terurus perkhidmatan web (Apl Fungsi Azure atau Apl Web Azure).
  • Kami mahu mewakilkan pengendalian sesi dan sambungan seberapa banyak yang kami boleh.

Pengurusan seumur hidup sesi

Pertama, untuk memastikan kami membuka sesi baharu bagi setiap permintaan, kami boleh membungkus fungsi permintaan ke dalam penghias yang memastikan sesi baharu dibuat dan kemudiannya dimusnahkan.

Untuk memastikan sesi kami mudah diakses dari seluruh aplikasi tanpa perlu menyerahkannya dalam setiap panggilan fungsi, kami menggunakan corak tunggal. Walau bagaimanapun, memandangkan kami menjalankan berbilang urutan untuk mengendalikan berbilang permintaan pada masa yang sama, kami perlu memastikan bahawa tiada syarat perlumbaan berkenaan dengan objek sesi.

SQL Alchemy mempunyai utiliti yang hebat untuk menjadikannya lebih mudah: sesi berskop.

Untuk menggunakan ini, kami membungkus kilang sambungan kami ke dalam panggilan scoped_session():

from urllib.parse import quote_plus
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

connection_string = "..."
engine = create_engine("mssql+pyodbc:///?odbc_connect={}".format(quote_plus(connection_string))
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)

Kini, bila-bila masa kami ingin menggunakan sesi, kami hanya memanggil Session() dan SQL Alchemy memastikan kami menggunakan semula objek sesi sedia ada. Jika kita selesai, kita boleh memanggil Session.remove() untuk menutup sesi. Tidak ada cara untuk SQL Alchemy untuk mengetahui sama ada urutan selesai jadi kami perlu melakukannya sendiri.

Sambung melalui token ID Entra menggunakan identiti terurus

Terdapat beberapa siaran yang menerangkan cara untuk menyediakan sambungan ke pangkalan data Azure SQL menggunakan token akses, tetapi sumber terbaik untuk ini ialah dokumen SQL Alchemy itu sendiri.

Mari kita semak butiran bersama-sama. Pertama, kita memerlukan rentetan sambungan. Memandangkan kami mahu bergantung pada identiti terurus (atau Azure CLI untuk pembangunan tempatan), kami tidak meletakkan sebarang bukti kelayakan ke dalam rentetan sambungan:

Pemandu={ODBC Driver 18 untuk SQL Server}; Pangkalan Data=YOUR_DB;Server=tcp:you.database.windows.net,1433;Encrypt=yes;TrustServerCertificate=no;Tamat Masa Sambungan=30

Pelan am kami ialah:

  • Tambahkan pengendali acara yang menyala apabila kami menyambung ke pangkalan data.
  • Dapatkan semula token akses apabila kami menyambung ke pangkalan data.
  • Laraskan hujah sambungan supaya kami meletakkan token akses (segar!) ke dalam rentetan sambungan.

Sekarang, mari kita lihat kod:

from urllib.parse import quote_plus
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

connection_string = "..."
engine = create_engine("mssql+pyodbc:///?odbc_connect={}".format(quote_plus(connection_string))
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)

Ringkasan

Dengan ini, kami mencapai matlamat kami. Dengan scoped_session() kita tidak perlu membuka sesi baharu setiap kali permintaan masuk (ini akan diuruskan untuk kita) tetapi kita harus menutup sesi pada penghujung supaya kita tidak mempunyai terlalu banyak sesi yang tergantung.

Kami juga menyambung ke pangkalan data SQL menggunakan identiti kami sendiri (untuk pembangun tempatan) atau identiti terurus perkhidmatan web. Kami mengubah suai rentetan sambungan setiap kali sambungan baharu dibuat.

Ucapan terima kasih

Terima kasih yang tidak terhingga kepada David kerana membantu saya memahami konsep sesi berskop.

Atas ialah kandungan terperinci Sambung ke pangkalan data Azure SQL dalam SQL Alchemy menggunakan token ID Entra. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn