Python Coding Academy
🐍 آموزش جامع Python — پست ۲۲۶
استفاده از ATTACH DATABASE برای اتصال چند دیتابیس SQLite
گاهی اطلاعات پروژه در چند فایل SQLite جداگانه ذخیره شدهاند؛ مثلاً اطلاعات کاربران در یک فایل و سفارشها در فایلی دیگر.
با دستور ATTACH DATABASE میتوانیم یک دیتابیس دیگر را به اتصال فعلی اضافه کنیم و از هر دو در Queryها استفاده کنیم.
🔹 اتصال به دیتابیس دوم
فرض کنیم دو فایل داریم:
project/
├── users.db
└── orders.db
میتوانیم هر دو را از طریق یک اتصال مدیریت کنیم:
import sqlite3
connection = sqlite3.connect("users.db")
connection.execute(
"ATTACH DATABASE ? AS orders_db",
("orders.db",)
)
print("Second database attached")
connection.close()
در این مثال، users.db دیتابیس اصلی و orders_db نام مستعاری است که برای دیتابیس دوم انتخاب کردهایم.
🔹 خواندن اطلاعات از دیتابیس دوم
فرض کنیم در orders.db جدولی به نام orders داریم.
پس از اتصال دیتابیس دوم، میتوانیم اطلاعات آن را بخوانیم:
import sqlite3
connection = sqlite3.connect("users.db")
connection.execute(
"ATTACH DATABASE ? AS orders_db",
("orders.db",)
)
rows = connection.execute("""
SELECT *
FROM orders_db.orders
""").fetchall()
for row in rows:
print(row)
connection.close()
ساختار کلی دسترسی به جدول دیتابیس متصلشده به این شکل است:
database_alias.table_name
بنابراین:
orders_db.orders
به جدول orders در دیتابیس دوم اشاره میکند.
🔹 ترکیب اطلاعات دو دیتابیس
فرض کنیم جدول users در دیتابیس اصلی و جدول orders در دیتابیس دوم قرار دارد و هر سفارش شامل user_id است.
میتوانیم آنها را با JOIN ترکیب کنیم:
rows = connection.execute("""
SELECT users.name, orders_db.orders.amount
FROM users
JOIN orders_db.orders
ON users.id = orders_db.orders.user_id
""").fetchall()
به این ترتیب، اطلاعات کاربران و سفارشهایشان از دو فایل متفاوت خوانده میشود.
🔹 جدا کردن دیتابیس دوم
اگر دیگر به دیتابیس دوم نیاز نداشته باشیم، میتوانیم آن را جدا کنیم:
connection.execute("DETACH DATABASE orders_db")
این کار دیتابیس را از اتصال فعلی جدا میکند؛ فایل آن را حذف نمیکند.
⚠️ نکات مهم
فایل دیتابیس دوم باید قابل دسترسی باشد؛ در غیر این صورت اتصال ممکن است با خطا مواجه شود.
از نام مستعار برای مشخصکردن دیتابیس موردنظر استفاده میکنیم.
هنگام استفاده از چند دیتابیس، نام جدولها را دقیق مشخص کن تا ابهام ایجاد نشود.
اگر به اتمیبودن تراکنش بین چند دیتابیس نیاز داری، محدودیتهای SQLite را بررسی کن؛ بهخصوص هنگام استفاده از WAL.
🧠 خلاصه
ATTACH DATABASE → اتصال دیتابیس دوم
alias.table → دسترسی به جدول دیتابیس دوم
JOIN → ترکیب اطلاعات
DETACH DATABASE → جداکردن دیتابیس
🎯 تمرین
دو دیتابیس به نامهای school.db و courses.db در نظر بگیر.
در school.db جدولی به نام students با ستونهای id و name داشته باش.
در courses.db جدولی به نام courses با ستونهای student_id و title داشته باش.
دیتابیس دوم را با نام مستعار course_db متصل کن.
با JOIN نام دانشجویان و عنوان دورههایشان را نمایش بده.
پست ۲۲۶ از دوره جامع Python 🐍
5 ·