Psycopg2: الدليل الشامل للعمل مع PostgreSQL في بايثون
مقدمة
PostgreSQL هي نظام إدارة قواعد بيانات علائقية قوي ومفتوح المصدر، تشتهر بموثوقيتها وقابليتها للتوسع ودعمها لأنواع البيانات المعقدة. للعمل مع PostgreSQL من بايثون، تُعد Psycopg2 الأداة الأكثر شيوعًا وموثوقية، وهي المشغل الرسمي المتزامن الذي يوفر حلاً مستقرًا وعالي الأداء للاتصال بقاعدة البيانات، وتنفيذ استعلامات SQL، وإدارة المعاملات، والتكامل مع أطر الويب.
تُعتبر Psycopg2 المعيار الفعلي للعمل مع PostgreSQL في مشاريع بايثون بفضل نضجها واكتمال وظائفها والدعم النشط من مجتمع المطورين.
ما هي Psycopg2
Psycopg2 هي محول بايثون لـ PostgreSQL، مكتوبة بلغة C باستخدام libpq (مكتبة العميل الرسمية لـ PostgreSQL). توفر المكتبة توافقًا كاملاً مع مواصفات DB-API 2.0 وتقدم العديد من الميزات الإضافية الخاصة بـ PostgreSQL.
الميزات الرئيسية لـ Psycopg2:
- أداء عالٍ: بفضل التنفيذ بلغة C والتفاعل المحسّن مع libpq
- أمان: حماية مدمجة ضد حقن SQL عبر الاستعلامات المُعلمة
- دعم المعاملات: تحكم كامل في المعاملات مع إمكانية الإدارة التلقائية
- التوافق مع أنواع البيانات: تحويل تلقائي بين أنواع PostgreSQL وPython
- دعم الامتدادات: العمل مع JSON، UUID، المصفوفات، hstore وأنواع بيانات PostgreSQL الأخرى
- أمان الخيوط: إمكانية الاستخدام في التطبيقات متعددة الخيوط
التثبيت والإعداد
تثبيت المكتبة
pip install psycopg2-binary
لبيئة الإنتاج، يُوصى باستخدام النسخة الكاملة:
pip install psycopg2
المتطلبات النظامية
قبل التثبيت، تأكد من تثبيت التبعيات اللازمة على النظام:
Ubuntu/Debian:
sudo apt-get install libpq-dev python3-dev
CentOS/RHEL:
sudo yum install postgresql-devel python3-devel
macOS:
brew install postgresql
الاتصال بقاعدة البيانات
الاتصال الأساسي
import psycopg2
# الاتصال بـ PostgreSQL
conn = psycopg2.connect(
dbname="mydb",
user="postgres",
password="password",
host="localhost",
port="5432"
)
# إنشاء مؤشر
cur = conn.cursor()
الاتصال عبر سلسلة الاتصال
conn = psycopg2.connect("postgresql://user:password@localhost:5432/dbname")
الاتصال مع معاملات إضافية
conn = psycopg2.connect(
dbname="mydb",
user="postgres",
password="password",
host="localhost",
port="5432",
sslmode="require",
connect_timeout=10,
application_name="my_app"
)
استخدام مديري السياق
import psycopg2
from contextlib import contextmanager
@contextmanager
def get_db_connection():
conn = psycopg2.connect(
dbname="mydb",
user="postgres",
password="password",
host="localhost"
)
try:
yield conn
finally:
conn.close()
# الاستخدام
with get_db_connection() as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM users")
results = cur.fetchal