التابع Connection.backup()‎ في بايثون

من موسوعة حسوب
مراجعة 21:29، 18 سبتمبر 2018 بواسطة Mohammed Taher (نقاش | مساهمات)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)


ينشئ هذا التابع نسخة احتياطية من قاعدة بيانات SQLite. يمكن إنشاء النسخة الاحتياطية اثناء استخدام قاعدة البيانات من قبل مستخدمين آخرين أو بالتزامن مع الاتصال الحالي.

يمكن استخدام هذا التابع مع قواعد بيانات SQLite ذات الإصدار 3.6.11 وأعلى.

ملاحظة: هذا التابع جديد في الإصدار 3.7 من اللغة.


البنية العامة

backup(target, *, pages=0, progress=None, name="main", sleep=0.250)

المعاملات

target

تحفظ النسخة الاحتياطية في المعامل الإلزامي target، والذي يجب أن يكون نسخة كائن اتصال أخرى.

pages

تُنسخ قاعدة البيانات بأكملها في خطوة واحدة وعلى نحو افتراضي، أو عندما يأخذ المعامل pages القيمة 0 أو أي قيمة سالبة. أما لو أخذ المعامل قيمًا موجبة فإنّ التابع يقسم عملية النسخ إلى عدة صفحات بحسب العدد المحدد في المعامل pages.

progress

معامل اختياري، يأخذ القيمة None أو كائنًا قابلًا للاستدعاء callable والذي سينفّذ عند كل دورة من دورات عملية نسخ قاعدة البيانات، ويأخذ هذا الكائن ثلاثة وسائط هي status وهي حالة الدورة الأخيرة، و remaining وهو عدد الصفحات المتبقية للنسخ، وtotal وهو العدد الكلي للصفحات.

name

يحدّد هذا المعامل اسم قاعدة البيانات التي سيجري نسخها، ويجب أن يكون سلسلة نصية تتضمّن القيمة "main" وهي القيمة الافتراضية وتشير إلى قاعدة البيانات الرئيسية، أو "temp" للإشارة إلى قاعدة البيانات المؤقتة، أو الاسم الذي يلي الكلمة المفتاحية AS في جملة ATTACH DATABASE لقواعد البيانات الملحقة.

sleep

يحدّد هذا المعامل عدد الثواني التي يجب على التابع أن يتوقف فيها بين محاولتين متتابعتين لإنشاء نسخة احتياطية للصفحات المتبقية، ويمكن تحديد قيمة هذا المعامل باستخدام الأعداد الصحيحة أو الأعداد العشرية ذات الفاصلة العائمة. يأخذ هذا المعامل القيمة الافتراضية 0.250 ثانية.

أمثلة

المثال الأول: نسخ قاعدة بيانات إلى قاعدة بيانات أخرى

import sqlite3

def progress(status, remaining, total):
    print(f'Copied {total-remaining} of {total} pages...')

con = sqlite3.connect('existing_db.db')
with sqlite3.connect('backup.db') as bck:
    con.backup(bck, pages=1, progress=progress)

المثال الثاني: نسخ قاعدة بيانات إلى قاعدة بيانات أخرى مؤقتة:

import sqlite3

source = sqlite3.connect('existing_db.db')
dest = sqlite3.connect(':memory:')
source.backup(dest)

مصادر

صفحة DB-API 2.0 interface for SQLite databases في توثيق بايثون الرسمي.