1. ما هو Sequelize ولماذا تحتاجه
Sequelize هي مكتبة ORM (تعيين الكائنات العلائقية) قوية لـ Node.js، تدعم العمل مع قواعد البيانات العلائقية: PostgreSQL, MySQL, MariaDB, SQLite و Microsoft SQL Server. تسمح ORM للمطورين بالتفاعل مع قاعدة البيانات باستخدام نهج كائني التوجه بدلاً من كتابة استعلامات SQL الخام.
المزايا الرئيسية لاستخدام Sequelize:
- تجريد SQL — العمل مع الجداول عبر كائنات وطرق JavaScript
- الأمان — حماية تلقائية من هجمات حقن SQL
- الترحيلات — إدارة تغييرات هيكل قاعدة البيانات
- العلاقات — تنفيذ بسيط للروابط بين الجداول (1:1, 1:M, M:N)
- التحقق — آليات مدمجة للتحقق من صحة البيانات
- المعاملات — دعم العمليات الذرية
Sequelize مثالية لبناء REST API، تطبيقات الويب على Express.js، البوتات وأي مشاريع تتطلب عملاً موثوقاً مع قواعد بيانات SQL.
2. التثبيت
يتم تثبيت Sequelize ومشغل قاعدة البيانات الخاصة بك عبر npm:
// الحزمة الأساسية
npm install sequelize
// مشغل PostgreSQL
npm install pg pg-hstore
// مشغل MySQL
npm install mysql2
// مشغل SQLite
npm install sqlite3
// مشغل MSSQL
npm install tedious
لبداية سريعة مع SQLite (لا يتطلب تثبيت خادم):
npm install sequelize sqlite3
3. بداية سريعة مع مثال كود
لنقم بإنشاء تطبيق بسيط لإدارة المستخدمين:
// index.js
const { Sequelize, DataTypes, Model } = require('sequelize');
// 1. الاتصال بقاعدة البيانات (SQLite)
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: './database.sqlite',
logging: false // إيقاف تسجيل استعلامات SQL
});
// 2. تعريف نموذج User
class User extends Model {}
User.init({
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true
}
},
age: {
type: DataTypes.INTEGER,
validate: {
min: 0,
max: 150
}
}
}, {
sequelize,
modelName: 'User',
timestamps: true // يضيف createdAt و updatedAt
});
// 3. المزامنة مع قاعدة البيانات وعمليات اختبارية
async function main() {
await sequelize.sync({ force: true }); // يعيد إنشاء الجدول
console.log('تم إنشاء جدول User');
// إنشاء مستخدم
const user = await User.create({
name: 'أحمد علي',
email: 'ahmed@example.com',
age: 30
});
console.log('تم إنشاء المستخدم:', user.toJSON());
// البحث عن جميع المستخدمين
const users = await User.findAll();
console.log('جميع المستخدمين:', JSON.stringify(users, null, 2));
// البحث بواسطة ID
const foundUser = await User.findByPk(1);
console.log('تم العثور على المستخدم:', foundUser.name);
// التحديث
await User.update({ age: 31 }, { where: { id: 1 } });
console.log('تم تحديث العمر');
// الحذف
await User.destroy({ where: { id: 1 } });
console.log('تم حذف المستخدم');
}
main().catch(console.error);
4. الطرق والوظائف الأساسية
4.1. Sequelize.define() / Model.init()
الوصف: تعريف النموذج (الجدول) مع تحديد الحقول وأنواعها.
المعلمات:
modelName— اسم النموذجattributes— كائن بتعريف الحقولoptions— إعدادات النموذج (tableName, timestamps, indexes وغيرها)
مثال:
const Product = sequelize.define('Product', {
title: {
type: DataTypes.ST