مكتبة Dataset Python: التعامل مع قواعد البيانات بأسلوب Pandas
ما هي مكتبة Dataset
Dataset — هي مكتبة Python توفر واجهة سهلة للتعامل مع قواعد البيانات SQL دون الحاجة لكتابة استعلامات SQL. تتيح لك العمل مع قواعد البيانات ببساطة كما تتعامل مع القواميس في Python، مع إنشاء الجداول تلقائياً وإدارة هيكل البيانات.
المزايا الرئيسية لمكتبة Dataset:
- إنشاء تلقائي للجداول والهياكل
- واجهة برمجية بسيطة بدون استعلامات SQL
- دعم العديد من أنظمة قواعد البيانات عبر SQLAlchemy
- صيغة بديهية وسهلة الفهم
- إعدادات بسيطة وأقل تكوين
- توافق ممتاز مع مكتبة Pandas
تثبيت وإعداد Dataset
تثبيت المكتبة
pip install dataset
قد تحتاج إلى برامج تشغيل إضافية للتعامل مع قواعد بيانات محددة:
# لقواعد بيانات PostgreSQL
pip install psycopg2-binary
# لقواعد بيانات MySQL
pip install pymysql
# برنامج تشغيل SQLite مدمج بالفعل في Python
الاتصال بقواعد بيانات مختلفة
import dataset
# SQLite (قاعدة بيانات محلية)
db = dataset.connect('sqlite:///mydatabase.db')
# PostgreSQL
db = dataset.connect('postgresql://user:password@localhost:5432/dbname')
# MySQL
db = dataset.connect('mysql://user:password@localhost/dbname')
# في الذاكرة (للاختبار)
db = dataset.connect('sqlite:///:memory:')
المبادئ الأساسية لعمل Dataset
يعمل Dataset وفق المبادئ التالية:
- إنشاء تلقائي للجداول — يتم إنشاء الجداول عند أول استخدام
- هيكل ديناميكي — يتشكل هيكل الجدول تلقائياً عند إدراج البيانات
- واجهة القواميس — يتم تمثيل البيانات كقواميس Python
- بدون SQL — جميع العمليات تتم عبر دوال Python
إنشاء وإدارة الجداول
الحصول على جدول
# الحصول على جدول (يتم إنشاؤه تلقائياً إذا لم يكن موجوداً)
users_table = db['users']
# طريقة بديلة
users_table = db.get_table('users')
إنشاء جدول بإعدادات مخصصة
# إنشاء جدول بمفتاح أساسي مخصص
db.create_table('products', primary_id='product_id', primary_type=db.types.string)
إدراج البيانات
إدراج سجل واحد
table = db['users']
# إدراج مستخدم واحد
table.insert({
'name': 'أحمد محمد',
'email': 'ahmed@example.com',
'age': 30,
'city': 'القاهرة'
})
إدراج جماعي
# إدراج عدة سجلات
users_data = [
{'name': 'سارة علي', 'email': 'sara@example.com', 'age': 25},
{'name': 'خالد عمر', 'email': 'khaled@example.com', 'age': 35},
{'name': 'مريم حسن', 'email': 'mariam@example.com', 'age': 28}
]
table.insert_many(users_data)
عمليات Upsert
# إدراج أو تحديث (إذا كان السجل بنفس البريد الإلكتروني موجوداً بالفعل)
table.upsert({
'name': 'أحمد محمد',
'email': 'ahmed@example.com',
'age': 31,
'city': 'الإسكندرية'
}, ['email'])
البحث وتصفية البيانات
الحصول على جميع السجلات
# الحصول على جميع السجلات
all_users = list(table.all())
for user in all_users:
print(f"{user['name']} - {user['email']}")
البحث بشروط
# البحث عن سجل واحد
user = table.find_one(name='أحمد محمد')
# البحث عن جميع السجلات بشرط
young_users = list(table.find(age={'<': 30}))