فارسی
باز کردن در Telegram

پست 🐍 آموزش جامع Python — پست ۲۲۴

12 اکتبر 2026
P
Python Coding Academy
🐍 آموزش جامع Python — پست ۲۲۴ مدیریت هم‌زمانی در SQLite با حالت WAL وقتی چند بخش از برنامه به‌طور هم‌زمان از یک Database استفاده می‌کنند، مدیریت خواندن و نوشتن اهمیت زیادی پیدا می‌کند. SQLite برای این موضوع حالتی به نام WAL (Write-Ahead Logging) دارد. در این حالت، تغییرات ابتدا در فایل لاگ ثبت می‌شوند و بعداً می‌توانند به فایل اصلی Database منتقل شوند. 🔹 فعال‌کردن WAL import sqlite3 connection = sqlite3.connect("shop.db") mode = connection.execute( "PRAGMA journal_mode = WAL" ).fetchone()[0] print(mode) connection.close() خروجی معمولاً: wal SQLite حالت Journal را به WAL تغییر می‌دهد و نام حالت فعال را برمی‌گرداند. 🔹 WAL چه مزیتی دارد؟ در حالت معمول، خواندن و نوشتن ممکن است بیشتر یکدیگر را مسدود کنند. WAL معمولاً اجازه می‌دهد: خواننده‌ها هم‌زمان با یک نویسنده فعال باشند. خواندن و نوشتن در بسیاری از شرایط روان‌تر انجام شود. تغییرات ابتدا در فایل -wal ثبت شوند. اما نکته مهم این است که WAL چند نویسنده هم‌زمان را ممکن نمی‌کند؛ SQLite همچنان در هر لحظه فقط یک نویسنده فعال دارد. 🔹 مشاهده فایل‌های Database وقتی WAL فعال باشد، ممکن است کنار فایل اصلی این فایل‌ها را ببینی: shop.db shop.db-wal shop.db-shm shop.db فایل اصلی Database است. shop.db-wal تغییرات ثبت‌شده در WAL را نگه می‌دارد. shop.db-shm برای هماهنگی دسترسی‌ها استفاده می‌شود. وجود این فایل‌ها در زمان فعال بودن WAL طبیعی است. 🔹 Checkpoint چیست؟ Checkpoint فرایندی است که تغییرات موجود در WAL را به فایل اصلی Database منتقل می‌کند. برای اجرای Checkpoint می‌توانیم از دستور زیر استفاده کنیم: import sqlite3 with sqlite3.connect("shop.db") as connection: result = connection.execute( "PRAGMA wal_checkpoint(PASSIVE)" ).fetchone() print(result) حالت PASSIVE تلاش می‌کند بدون منتظر ماندن برای خواننده‌های مزاحم، تا حد ممکن Checkpoint انجام دهد. معمولاً لازم نیست در هر عملیات این دستور را دستی اجرا کنیم؛ SQLite می‌تواند Checkpoint را خودکار مدیریت کند. ⚠️ نکات مهم WAL برای بسیاری از برنامه‌های محلی و چندخواننده‌ای مفید است. WAL برای دسترسی مستقیم چند رایانه از طریق فایل‌سیستم شبکه‌ای مناسب نیست. هنگام پشتیبان‌گیری، فایل اصلی را به‌تنهایی و بدون درنظرگرفتن وضعیت WAL کپی نکن؛ برای Backup مطمئن می‌توانی از Connection.backup() استفاده کنی. فعال‌کردن WAL به معنی حذف محدودیت یک نویسنده هم‌زمان نیست. 🧠 خلاصه WAL ↓ ثبت تغییرات در فایل لاگ ↓ امکان خواندن هم‌زمان با نوشتن ↓ Checkpoint ↓ انتقال تغییرات به Database اصلی 🎯 تمرین برنامه‌ای بنویس که: به shop.db متصل شود. حالت WAL را فعال کند. حالت فعال را چاپ کند. یک رکورد درج کند. اتصال را به‌درستی مدیریت کند. پست ۲۲۴ از دوره جامع Python 🐍
3 ·

در همان حوالی فید

PPython Coding Academy🐍 آموزش جامع Python — پست ۲۲۲ ذخیره داده‌های باینری در SQLite با BLOB تا اینجا بیشتر با داده‌های متنی و عددی در SQLite کار کردیم. اما گاهی لازم است داده‌های بایPPython Coding Academy🐍 آموزش جامع Python — پست ۲۲۳ ذخیره و بازیابی تاریخ و زمان در SQLite در برنامه‌هایی مثل فروشگاه، سیستم حضور و غیاب و مدیریت سفارش‌ها، معمولاً لازم است تاریخ و ز
این پیام
PPython Coding Academy🐍 آموزش جامع Python — پست ۲۲۵ ساخت دیتابیس موقت با :memory: گاهی برای آزمایش کد یا اجرای تست‌ها به Database نیاز داریم، اما نمی‌خواهیم فایلی روی دیسک ساخته شود.PPython Coding Academy🐍 آموزش جامع Python — پست ۲۲۶ استفاده از ATTACH DATABASE برای اتصال چند دیتابیس SQLite گاهی اطلاعات پروژه در چند فایل SQLite جداگانه ذخیره شده‌اند؛ مثلاً اطلاعا
PPython Coding AcademyPython Coding Academy@PythonCodingAcademy · کانال · فناوری
30مشترک68پست در 30 روز
فید انجمن باز کردن در Telegram

فید عمومی باز از ایندکس جست‌وجو ChatCrawler — «Google برای Telegram عمومی»؛ با خزش انجمن به‌روز می‌شود. زمان‌ها به UTC است.

فقط محتوای عمومی، API رسمی Telegram. دربارهٔ ما · پرسش‌ها · محدودیت‌های ایندکس · حذف یک صفحه · کاتالوگ · جست‌وجو · روش محاسبهٔ ما