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创建用户定义的函数。
Syntax :
create_function(name, no_of_params, func)
Parameter:
- name: The function name we want to give
- no_of_params: The number of parameters the function accepts. If no_of_params is set to -1, the function may take any number of arguments.
- func: It is a Python callable function that is called the SQL function within a query.
Returns:
create_function() can return bytes, str, int, float, and None any of the types supported by SQLite.
首先,创建一个用户定义的函数,然后调用 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()
输出:
Welcome Rohit your dept is IT
重新定义现有的 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()
输出:
15