التابع sqlite3.complete_statement()‎ في بايثون

من موسوعة حسوب
مراجعة 07:12، 18 سبتمبر 2018 بواسطة Mohammed Taher (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:التابع <code>sqlite3.complete_statement()‎</code> في بايثون}}</noinclude> ينشئ التابع دالة معرفة من قبل...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

ينشئ التابع دالة معرفة من قبل المستخدم يمكن استعمالها لاحقًا ضمن جمل SQL.

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

create_function(name, num_params, func)

المعاملات

name

اسم الدالة المراد إنشاؤها.

num_params

عدد المعاملات التي تستقبلها الدالة (يمكن تعيين القيمة ‎-1 لهذا المعامل لتستقبل الدالة أي عدد من المعاملات).

func

كائن قابل للاستدعاء callable في بايثون، والذي سيستدعى كدالة SQL.

القيمة المعادة

يمكن للدالة أن تعيد أي قيمة من القيم المدعومة في SQLite وهي: bytes، str، int، float، None.

أمثلة

يبين المثال التالي آلية عمل التابع:

import sqlite3
import hashlib

def md5sum(t):
    return hashlib.md5(t).hexdigest()

con = sqlite3.connect(":memory:")
con.create_function("md5", 1, md5sum)
cur = con.cursor()
cur.execute("select md5(?)", (b"foo",))
print(cur.fetchone()[0])

create_aggregate(name, num_params, aggregate_class)

ينشئ التابع دالة تجميع aggregate function معرّفة من قبل المستخدم. يجب أن يتضمن صنف aggregate تابعًا خطويًا step method، يأخذ المعامل num_params والذي يحدّد عدد المعاملات في الدالة التي ينشئها التابع (يمكن تعيين القيمة ‎-1 لهذا المعامل لتستقبل الدالة أي عدد من المعاملات)، وتابع إنهاء finalize method والذي سيعيد النتيجة النهائية من التجميع.

يمكن لتابع الإنهاء أن يعيد أي قيمة من القيم المدعومة في SQLite وهي: bytes، str، int، float، None.

مثال:

import sqlite3

class MySum:
    def __init__(self):
        self.count = 0

    def step(self, value):
        self.count += value

    def finalize(self):
        return self.count

con = sqlite3.connect(":memory:")
con.create_aggregate("mysum", 1, MySum)
cur = con.cursor()
cur.execute("create table test(i)")
cur.execute("insert into test(i) values (1)")
cur.execute("insert into test(i) values (2)")
cur.execute("select mysum(i) from test")
print(cur.fetchone()[0])

انظر أيضًا

مصادر

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