Rumah >pembangunan bahagian belakang >Tutorial Python >Sambung ke pangkalan data Azure SQL dalam SQL Alchemy menggunakan token ID Entra
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:
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.
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:
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)
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.
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!