التابع sqlite3.complete_statement()
في بايثون
ينشئ التابع دالة معرفة من قبل المستخدم يمكن استعمالها لاحقًا ضمن جمل 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])
انظر أيضًا
- التابع
Connection.create_aggregate()
:ينشئ التابع دالة تجميع aggregate function معرّفة من قبل المستخدم. - التابع
Connection.create_collation()
:ينشئ التابع ترتيبًا collation يحمل الاسم المعطى مع الكائن القابل للاستدعاء المعطى.
مصادر
صفحة DB-API 2.0 interface for SQLite databases في توثيق بايثون الرسمي.