📜  Python – 创建或重新定义 SQLite 函数

📅  最后修改于: 2022-05-13 01:54:33.492000             🧑  作者: Mango

Python – 创建或重新定义 SQLite 函数

SQLite 没有像 MySQL 那样的函数或存储过程语言。我们不能在 SQLite 中创建存储函数或过程。这意味着 CREATE FUNCTION 或 CREATE PROCEDURE 在 SQLite 中不起作用。在 SQLite 中,而不是 CREATE FUNCTION 或 CREATE PROCEDURE,我们有 SQLite 的 C API,它允许我们创建自己的用户定义函数,或者我们可以通过采用预定义函数的名称来重新定义现有的 SQL 函数。

要使用 SQLite 的 C API,我们不需要任何特殊模块来导入包含此 C API 的Python sqlite3 模块,它允许我们在Python创建和重新定义 SQL 函数。

此处使用的表可以使用本文-此处创建。

创建一个新的用户定义函数

有时,我们需要多次执行特定任务,因此最好创建一组称为函数的任务,以便在执行 SQL 语句时可以直接调用该函数。在这种情况下,我们需要创建自己的函数,称为用户定义函数。



使用 SQLite create_function()在Python创建用户定义的函数。

首先,创建一个用户定义的函数,然后调用 create_function() 这是一个连接类,并简单地传递上述语法中提供的三个参数 -函数名称、'_customFun' 接受的参数数量以及被调用的Python可调用作为查询中的 SQL函数。在执行操作并使用 cursor.fetchone() 获取结果之后。我们得到用户定义的函数所需的输出。

例子:



Python3
import sqlite3
  
# define user defined function
def _customFun(fstring, dept):
    result = 'Welcome ' + fstring + ' your dept is ' + dept
    return result
  
  
# define connection and cursor
connection = sqlite3.connect('geekforgeeks_student.db')
cursor = connection.cursor()
  
# create the user defined function
connection.create_function("ROHACK", 2, _customFun)
  
# create and execute sql query
sqlQuery = "select ROHACK(First_Name,Department) from \
STUDENT where Student_ID = 1"
cursor.execute(sqlQuery)
print(*cursor.fetchone())
  
# close cursor and connection
cursor.close()
connection.close()


Python3
import sqlite3
  
# re-define existing SQLite function with 
# new defination
def length(data):
    result = len(data) + 10
    return result
  
  
# define connection and cursor
connection = sqlite3.connect('geekforgeeks_student.db')
cursor = connection.cursor()
  
# create the function with same name as existing function
connection.create_function("length", 1, length)
  
# create and execute sql query
sqlQuery = "select length(First_Name) from STUDENT where Student_ID = 1"
cursor.execute(sqlQuery)
print(*cursor.fetchone())
  
# close cursor and connection
cursor.close()
connection.close()


输出:

重新定义现有的 SQLite 函数

在某些情况下,我们需要重新定义 SQLite 函数的现有工作方式。例如,让我们更改 SQLite 内置函数“length()”,这样无论何时从 SQL 查询调用此函数,它都会计算字符串的长度并将该计数加 10,而不是仅给出正常计数。

例子:

蟒蛇3

import sqlite3
  
# re-define existing SQLite function with 
# new defination
def length(data):
    result = len(data) + 10
    return result
  
  
# define connection and cursor
connection = sqlite3.connect('geekforgeeks_student.db')
cursor = connection.cursor()
  
# create the function with same name as existing function
connection.create_function("length", 1, length)
  
# create and execute sql query
sqlQuery = "select length(First_Name) from STUDENT where Student_ID = 1"
cursor.execute(sqlQuery)
print(*cursor.fetchone())
  
# close cursor and connection
cursor.close()
connection.close()

输出: