التابع 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)

انظر أيضًا

مصادر

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