التابع Connection.set_authorizer()
في بايثون
يسجّل هذا التابع كائن استدعاء خلفيٍّ، وينفّذ هذا الكائن في كل محاولة للوصول إلى عمود في جدول ضمن قاعدة البيانات.
البنية العامة
set_authorizer(authorizer_callback)
المعاملات
authorizer_callback
كائن استدعاء خلفي يُنفّذ في كل محاولة للوصول إلى أعمدة الجداول في قاعدة البيانات.
يجب أن يعيد الاستدعاء الخلفية النتيجة SQLITE_OK
إن كان الوصول مسموحًا به، والنتيجة SQLITE_DENY
إن كان المطلوب تجاهل جملة SQL بأكملها مع إطلاق خطأ، والنتيجة SQLITE_IGONRE
إن كن المطلوب التعامل مع العمود على أنّه يحمل القيمة NULL
. هذه الثوابت متاحة في وحدة sqlite3
.
يحدّد الوسيط الأول للاستدعاء الخلفي نوع العملية المفوَّضة، أما الوسيطان الثاني والثالث فتتحدّد طبيعتهما بين أن يكونا وسائط أو يكونا None
بالاعتماد على الوسيط الأول.
الوسيط الرابع هو اسم قاعدة البيانات ("main"، "temp
" ... الخ) إن كان قابلًا للتطبيق. أما الوسيط الخامس فهو إما اسم الإجراء أو العرض الداخلي المسؤول عن محاولة الوصول إلى العمود، أو القيمة None
إن كانت عملية الوصول ناتجة بصورة مباشرة عن شيفرة SQL مدخلة.
نرجو منك مراجعة توثيق SQLite حول القيم التي يمكن للوسيط الأول أن يأخذها، والمعنى الذي يحمله الوسيطان الثاني والثالث بالاعتماد على الوسيط الأول. جميع الثوابت المطلوبة متوفّرة في وحدة sqlite3
.
أمثلة
يبين المثال التالي آلية عمل التابع:
>>> import sqlite3
>>>
>>> def select_authorizer(*args):
... print(args)
... return sqlite3.SQLITE_OK
...
>>> conn = sqlite3.connect(":memory:")
>>> conn.execute("CREATE TABLE A (name integer PRIMARY KEY AUTOINCREMENT)")
<sqlite3.Cursor object at 0x7f8ecec7f9d0>
>>> conn.set_authorizer(select_authorizer)
>>> conn.execute("SELECT * FROM A").fetchall()
(21, None, None, None, None)
(20, 'A', 'name', 'main', None)
(20, 'A', '', None, None)
انظر أيضًا
- التابع
Connection.set_progress_handler()
:يسجّل هذا التابع استدعاءً خلفيًا يجري تنفيذه لكلn
من تعليمات SQLite في الجهاز الافتراضي virtual machine. - التابع
Connection.set_trace_callback()
:يسجل التابع trace_callback يجري استدعاؤه لكل جملة SQL تنفّذ بواسطة SQLite.
مصادر
صفحة DB-API 2.0 interface for SQLite databases في توثيق بايثون الرسمي.