مشاركة عبر


التشغيل السريع: استخدام Python لتوصيل البيانات والاستعلام عنها في قاعدة بيانات Azure ل PostgreSQL

في هذا التشغيل السريع، يمكنك الاتصال بمثيل خادم مرن لقاعدة بيانات Azure ل PostgreSQL باستخدام Python. ثم يمكنك استخدام عبارات SQL للاستعلام عن البيانات وإدراجها وتحديثها وحذفها في قاعدة البيانات من أنظمة macOS وUbuntu Linux وWindows الأساسية.

تتضمن الخطوات الواردة في هذه المقالة طريقتين للمصادقة: مصادقة Microsoft Entra ومصادقة PostgreSQL. تعرض علامة التبويب Passwordless مصادقة Microsoft Entra وتعرض علامة التبويب Password مصادقة PostgreSQL.

مصادقة Microsoft Entra هي آلية للاتصال بقاعدة بيانات Azure ل PostgreSQL باستخدام الهويات المحددة في معرف Microsoft Entra. باستخدام مصادقة Microsoft Entra، يمكنك إدارة هويات مستخدمي قاعدة البيانات خدمات Microsoft الأخرى في موقع مركزي، ما يبسط إدارة الأذونات. لمعرفة المزيد، راجع مصادقة Microsoft Entra باستخدام قاعدة بيانات Azure ل PostgreSQL.

تستخدم مصادقة PostgreSQL الحسابات المخزنة في PostgreSQL. إذا اخترت استخدام كلمات المرور كبيانات اعتماد للحسابات، تخزين بيانات الاعتماد هذه في user الجدول. نظرا إلى تخزين كلمات المرور هذه في PostgreSQL، تحتاج إلى إدارة تدوير كلمات المرور بنفسك.

تفترض هذه المقالة أنك على دراية بالتطوير باستخدام Python، ولكنك جديد في العمل مع قاعدة بيانات Azure ل PostgreSQL.

المتطلبات الأساسية

إضافة قواعد جدار الحماية لمحطة عمل العميل

  • إذا قمت بإنشاء مثيل الخادم المرن لقاعدة بيانات Azure ل PostgreSQL مع الوصول الخاص (تكامل الشبكة الظاهرية)، فأنت بحاجة إلى الاتصال بالخادم الخاص بك من مورد داخل نفس الشبكة الظاهرية مثل الخادم الخاص بك. يمكنك إنشاء جهاز ظاهري وإضافته إلى الشبكة الظاهرية التي تم إنشاؤها باستخدام قاعدة بيانات Azure لمثيل الخادم المرن PostgreSQL. ارجع إلى الشبكات.
  • إذا قمت بإنشاء مثيل خادم مرن لقاعدة بيانات Azure ل PostgreSQL مع الوصول العام (عناوين IP المسموح بها)، يمكنك إضافة عنوان IP المحلي إلى قائمة قواعد جدار الحماية على الخادم الخاص بك. ارجع إلى الشبكات.

تكوين تكامل Microsoft Entra على الخادم (بدون كلمة مرور فقط)

إذا كنت تتبع خطوات المصادقة بدون كلمة مرور، فيجب تكوين مصادقة Microsoft Entra لمثيل الخادم الخاص بك، ويجب تعيينك كمسؤول Microsoft Entra على مثيل الخادم. اتبع الخطوات الواردة في تكوين تكامل Microsoft Entra للتأكد من تكوين مصادقة Microsoft Entra وتعيينك كمسؤول Microsoft Entra على مثيل الخادم الخاص بك.

جهز بيئة التطوير الخاصة بك

قم بالتغيير إلى مجلد حيث تريد تشغيل التعليمات البرمجية وإنشاء بيئة ظاهرية وتنشيطها. البيئة الظاهرية هي دليل قائم بذاته لإصدار معين من Python بالإضافة إلى الحزم الأخرى المطلوبة لهذا التطبيق.

قم بتشغيل الأوامر التالية لإنشاء بيئة ظاهرية وتنشيطها:

py -3 -m venv .venv
.venv\Scripts\activate

تثبيت مكتبات Python

قم بتثبيت مكتبات Python المطلوبة لتشغيل أمثلة التعليمات البرمجية.

قم بتثبيت مكتبة azure-identity، التي توفر دعم مصادقة الرمز المميز ل Microsoft Entra عبر Azure SDK.

# Use the interpreter-bound pip to ensure installs go into the active venv/interpreter
python -m pip install --upgrade pip
python -m pip install azure-identity azure-keyvault-secrets

إضافة رمز المصادقة

في هذا القسم، يمكنك إضافة رمز المصادقة إلى دليل العمل الخاص بك وتنفيذ أي خطوات إضافية مطلوبة للمصادقة والتخويل مع مثيل الخادم الخاص بك.

قبل إضافة رمز المصادقة، تأكد من تثبيت الحزم المطلوبة لكل مثال.

الحزم المطلوبة (أمثلة في هذه المقالة):

  • مثال بدون كلمة مرور: azure-identity، azure-keyvault-secrets (إذا كنت تستخدم Key Vault)
  • مثال على كلمة المرور: psycopg (موصى به: python -m pip install "psycopg[binary]")

اختياري: قم بإنشاء ملف requirements.txt باستخدام هذه الإدخالات وقم بالتثبيت باستخدام python -m pip install -r requirements.txt عمليات التثبيت القابلة للتكرار.

  1. انسخ التعليمات البرمجية التالية إلى محرر واحفظها في ملف يسمى get_conn.py.

    import urllib.parse
    import os
    
    from azure.identity import DefaultAzureCredential
    
    # IMPORTANT! This code is for demonstration purposes only. It's not suitable for use in production.
    # For example, tokens issued by Microsoft Entra ID have a limited lifetime (24 hours by default).
    # In production code, you need to implement a token refresh policy.
    
    def get_connection_uri():
    
        # Read URI parameters from the environment
        dbhost = os.environ['DBHOST']
        dbname = os.environ['DBNAME']
        dbuser = urllib.parse.quote(os.environ['DBUSER'])
        sslmode = os.environ['SSLMODE']
    
        # Use passwordless authentication via DefaultAzureCredential.
        # IMPORTANT! This code is for demonstration purposes only. DefaultAzureCredential() is invoked on every call.
        # In practice, it's better to persist the credential across calls and reuse it so you can take advantage of token
        # caching and minimize round trips to the identity provider. To learn more, see:
        # https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/identity/azure-identity/TOKEN_CACHING.md
        credential = DefaultAzureCredential()
    
        # Call get_token() to get a token from Microsft Entra ID and add it as the password in the URI.
        # Note the requested scope parameter in the call to get_token, "https://ossrdbms-aad.database.windows.net/.default".
        password = credential.get_token("https://ossrdbms-aad.database.windows.net/.default").token
    
        db_uri = f"postgresql://{dbuser}:{password}@{dbhost}/{dbname}?sslmode={sslmode}"
        return db_uri
    
  2. الحصول على معلومات اتصال قاعدة البيانات.

    1. في مدخل Microsoft Azure، ابحث عن قاعدة بيانات Azure الخاصة بك وحددها لاسم مثيل الخادم المرن PostgreSQL.
    2. في صفحة نظرة عامة على الخادم، انسخ اسم الخادم المؤهل بالكامل. يظهر اسم الخادم المؤهل بالكامل دائمًا في صورة <اسم - الخادم - الخاص بي>.postgres.database.azure.com.
    3. في القائمة اليسرى، ضمن Security، حدد Authentication. تأكد من إدراج حسابك ضمن مسؤولي Microsoft Entra. إذا لم يكن الأمر كذلك، فأكمل الخطوات الواردة في تكوين تكامل Microsoft Entra على الخادم (بدون كلمة مرور فقط) .
  3. تعيين متغيرات البيئة لعناصر URI للاتصال:

    set DBHOST=<server-name>
    set DBNAME=<database-name>
    set DBUSER=<username>
    set SSLMODE=require
    
  4. سجل الدخول إلى Azure على محطة العمل الخاصة بك. يمكنك تسجيل الدخول باستخدام Azure CLI أو Azure PowerShell أو Azure Developer CLI.

    يستخدم DefaultAzureCredential رمز المصادقة للمصادقة باستخدام معرف Microsoft Entra والحصول على رمز مميز يخولك تنفيذ العمليات على مثيل الخادم الخاص بك. DefaultAzureCredential يدعم سلسلة من أنواع بيانات اعتماد المصادقة. من بين بيانات الاعتماد المدعومة بيانات الاعتماد التي قمت بتسجيل الدخول إليها إلى أدوات المطور مثل Azure CLI أو Azure PowerShell أو Azure Developer CLI.


كيفية تشغيل أمثلة Python

لكل عينة من الرموز البرمجية في هذه المقالة:

  1. إنشاء ملف جديد في محرر نص.

  2. إضافة نماذج التعليمات البرمجية في الملف.

  3. احفظ الملف في مجلد المشروع بملحق .py ، مثل postgres-insert.py. بالنسبة لنظام التشغيل Windows ، تأكد من تحديد ترميز UTF-8 عند حفظ الملف.

  4. في نوع python مجلد المشروع متبوعا باسم الملف، على سبيل المثال python postgres-insert.py.

أنشئ جدول، وأدرج البيانات

يتصل مثال التعليمات البرمجية التالي بقاعدة بيانات Azure لقاعدة بيانات الخادم المرنة PostgreSQL باستخدام الوظيفة psycopg.connect ، ويقوم بتحميل البيانات بعبارة SQL INSERT . cursor.execute تنفذ الدالة استعلام SQL مقابل قاعدة البيانات.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Drop previous table of same name if one exists
cursor.execute("DROP TABLE IF EXISTS inventory;")
print("Finished dropping table (if existed)")

# Create a table
cursor.execute("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
print("Finished creating table")

# Insert some data into the table
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("banana", 150))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("orange", 154))
cursor.execute("INSERT INTO inventory (name, quantity) VALUES (%s, %s);", ("apple", 100))
print("Inserted 3 rows of data")

# Clean up
conn.commit()
cursor.close()
conn.close()

عند نجاح تشغيل التعليمة البرمجية يُنتج المخرجات التالية:

Connection established
Finished dropping table (if existed)
Finished creating table
Inserted 3 rows of data

اقرأ البيانات

يتصل مثال التعليمات البرمجية التالي بقاعدة بيانات Azure لقاعدة بيانات الخادم المرنة ل PostgreSQL ويستخدم cursor.execute مع عبارة SQL SELECT لقراءة البيانات. تقبل هذه الدالة استعلاما وترجع مجموعة نتائج للتكرار باستخدام cursor.fetchall().

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Fetch all rows from table
cursor.execute("SELECT * FROM inventory;")
rows = cursor.fetchall()

# Print all rows
for row in rows:
    print("Data row = (%s, %s, %s)" %(str(row[0]), str(row[1]), str(row[2])))

# Cleanup
conn.commit()
cursor.close()
conn.close()

عند نجاح تشغيل التعليمة البرمجية يُنتج المخرجات التالية:

Connection established
Data row = (1, banana, 150)
Data row = (2, orange, 154)
Data row = (3, apple, 100)

تحديث البيانات

يتصل مثال التعليمات البرمجية التالي بقاعدة بيانات Azure لقاعدة بيانات الخادم المرنة PostgreSQL ويستخدم cursor.execute مع عبارة SQL UPDATE لتحديث البيانات.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Update a data row in the table
cursor.execute("UPDATE inventory SET quantity = %s WHERE name = %s;", (200, "banana"))
print("Updated 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()

حذف البيانات

يتصل مثال التعليمات البرمجية التالي بقاعدة بيانات Azure لقاعدة بيانات الخادم المرنة PostgreSQL ويستخدم cursor.execute مع عبارة SQL DELETE لحذف عنصر مخزون قمت بإدخاله مسبقا.

import psycopg
from get_conn import get_connection_uri

conn_string = get_connection_uri()

conn = psycopg.connect(conn_string)
print("Connection established")
cursor = conn.cursor()

# Delete data row from table
cursor.execute("DELETE FROM inventory WHERE name = %s;", ("orange",))
print("Deleted 1 row of data")

# Cleanup
conn.commit()
cursor.close()
conn.close()