مشاركة عبر


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

ينطبق على: قاعدة بيانات 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 المرن.

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

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

تكوين تكامل 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.

pip install azure-identity

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

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

  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 Database for 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
    

    استبدل قيم العنصر النائب التالية في الأوامر:

    • <server-name> بالقيمة التي نسختها من مدخل Microsoft Azure.
    • <username> مع اسم مستخدم Azure الخاص بك؛ على سبيل المثال. john@contoso.com.
    • <database-name> باسم قاعدة بيانات Azure Database for PostgreSQL المرنة. تم إنشاء قاعدة بيانات افتراضية تسمى postgres تلقائيا عند إنشاء الخادم الخاص بك. يمكنك استخدام قاعدة البيانات هذه أو إنشاء قاعدة بيانات جديدة باستخدام أوامر SQL.
  4. سجل الدخول إلى Azure على محطة العمل الخاصة بك. يمكنك تسجيل الدخول باستخدام Azure CLI أو Azure PowerShell أو Azure Developer CLI. على سبيل المثال، لتسجيل الدخول عبر Azure CLI، أدخل هذا الأمر:

    az login
    

    يستخدم 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 Database for 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 Database for 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 Database for 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 Database for 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()