العمل مع SQLite في بايثون: دليل شامل للمبتدئين والمطورين المحترفين
يُعد التعامل مع قواعد البيانات من أهم المهام عند تطوير التطبيقات. إذا كنت بحاجة إلى حل خفيف ومدمج دون الحاجة إلى تثبيت خوادم منفصلة، فإن SQLite هو الخيار الأمثل لك.
بفضل الوحدة القياسية sqlite3 في بايثون، يمكنك بسرعة إنشاء قواعد البيانات وتعديلها وإدارتها مباشرة من الكود. في هذا المقال، ستتعلم كيفية الاتصال بـ SQLite، وإجراء عمليات إدراج البيانات (INSERT)، والتحديث (UPDATE)، وغيرها الكثير.
ما هو SQLite ولماذا يختاره المطورون؟
SQLite هي قاعدة بيانات علائقية مدمجة تخزن جميع المعلومات في ملف واحد. لا تحتاج إلى خادم منفصل، وهي مثالية للنماذج الأولية والمشاريع الصغيرة وتطبيقات الهواتف المحمولة.
تُستخدم SQLite على نطاق واسع في مجالات تطوير البرمجيات المختلفة. العديد من التطبيقات الشهيرة، بما في ذلك المتصفحات وتطبيقات المراسلة وتطبيقات الهواتف، تستخدم SQLite لتخزين البيانات محليًا.
مزايا SQLite
- لا يتطلب تثبيت خادم
- سرعة أداء عالية
- سهولة في الاستخدام
- تكامل ممتاز مع بايثون عبر وحدة sqlite3
- متعدد المنصات وقابل للنقل
- دعم معاملات ACID
- استهلاك ضئيل للموارد
قيود SQLite
- لا يدعم الكتابة المتزامنة من عدة مستخدمين
- أداء محدود مع كميات كبيرة من البيانات
- عدم وجود نسخ متماثل مدمج
- إمكانيات محدودة للتطبيقات المعقدة متعددة المستخدمين
الاتصال بقاعدة بيانات SQLite في بايثون
الاتصال الأساسي
import sqlite3
# الاتصال بقاعدة البيانات (إذا لم يكن الملف موجودًا، سيتم إنشاؤه)
conn = sqlite3.connect('my_database.db')
# إنشاء مؤشر لتنفيذ استعلامات SQL
cursor = conn.cursor()
الاتصال بقاعدة بيانات في الذاكرة
للتخزين المؤقت للبيانات أو الاختبار، يمكنك استخدام قاعدة بيانات في الذاكرة:
conn = sqlite3.connect(':memory:')
إعدادات الاتصال المتقدمة
conn = sqlite3.connect('my_database.db', timeout=10)
conn.execute('PRAGMA foreign_keys = ON') # تفعيل المفاتيح الخارجية
إنشاء جدول في SQLite
إنشاء جدول بسيط
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
''')
conn.commit()
إنشاء جدول مع قيود إضافية
cursor.execute('''
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
price REAL CHECK(price > 0),
category TEXT DEFAULT 'غير مصنف',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
إنشاء فهارس لتحسين الأداء
cursor.execute('''
CREATE INDEX IF NOT EXISTS idx_users_name ON users(name)
''')
conn.commit()
إدراج البيانات في الجدول - python sqlite3 insert
إدراج سجل واحد
من أكثر الاستعلامات شيوعًا هو كيفية إدراج البيانات في جدول SQLite:
cursor.execute('''
INSERT INTO users (name, age) VALUES (?, ?)
''', ('أحمد', 30))
conn.commit()
استخدام علامات الاستفهام يحمي من هجمات حقن SQL (SQL Injection) وهو الأسلوب الموصى به.
إدراج بيانات متعددة
users = [('أحمد', 25), ('سارة', 28), ('خالد', 35)]
cursor.executemany('''
INSERT INTO users (name, age) VALUES (?, ?)
''', users)
conn.commit()
استعلام SELECT في SQLite مع بايثون
جلب جميع البيانات
cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()
for row in rows:
print(row)
جلب بيانات بشروط محددة
cursor.execute('SELECT * FROM users WHERE age > ?', (25,))
rows = cursor.fetchall()
استخدام ORDER BY و LIMIT
cursor.execute('SELECT * FROM users ORDER BY age DESC LIMIT 5')
rows = cursor.fetchall()
تحديث البيانات - UPDATE في SQLite
cursor.execute('''
UPDATE users SET age = ? WHERE name = ?
''', (31, 'أحمد'))
conn.commit()
حذف البيانات - DELETE في SQLite
cursor.execute('''
DELETE FROM users WHERE age < ?
''', (18,))
conn.commit()
إغلاق الاتصال بقاعدة البيانات
conn.close()
تذكر دائمًا إغلاق الاتصال بعد الانتهاء من العمل لتجنب تسرب الموارد.