#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
وحدة الاتصال بقاعدة البيانات | |
""" | |
import os | |
import sys | |
import psycopg2 | |
from dotenv import load_dotenv | |
# إضافة مسار النظام للوصول للملفات المشتركة | |
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) | |
# تحميل متغيرات البيئة | |
load_dotenv() | |
def get_connection(): | |
""" | |
إنشاء اتصال بقاعدة البيانات | |
الإرجاع: | |
اتصال بقاعدة البيانات | |
""" | |
try: | |
# محاولة الاتصال بقاعدة البيانات | |
conn = psycopg2.connect( | |
dbname=os.getenv("PGDATABASE"), | |
user=os.getenv("PGUSER"), | |
password=os.getenv("PGPASSWORD"), | |
host=os.getenv("PGHOST"), | |
port=os.getenv("PGPORT") | |
) | |
return conn | |
except Exception as e: | |
print(f"خطأ في الاتصال بقاعدة البيانات: {e}") | |
# إذا فشل الاتصال، استخدم اتصال قاعدة بيانات SQLite محلية | |
import os | |
import sqlite3 | |
# إنشاء مجلد البيانات إذا لم يكن موجوداً | |
data_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data') | |
os.makedirs(data_dir, exist_ok=True) | |
# إنشاء اتصال قاعدة بيانات SQLite محلية | |
db_path = os.path.join(data_dir, 'local_db.sqlite') | |
conn = sqlite3.connect(db_path) | |
# إعادة محاكاة سلوك اتصال PostgreSQL | |
conn.execute = conn.cursor().execute | |
# إضافة وظيفة وهمية للاقتطاع (commit) والإغلاق | |
original_close = conn.close | |
def enhanced_close(): | |
conn.commit() | |
original_close() | |
conn.close = enhanced_close | |
return conn |