Python: crea o redefine funciones de SQLite

El SQLite no tiene funciones o lenguaje de procedimientos almacenados como MySQL. No podemos crear funciones o procedimientos almacenados en SQLite. Eso significa que CREAR FUNCIÓN o CREAR PROCEDIMIENTO no funciona en SQLite. En SQLite, en lugar de CREAR FUNCIÓN o CREAR PROCEDIMIENTO, tenemos la API C de SQLite que nos permite crear nuestras propias funciones definidas por el usuario, o podemos redefinir las funciones SQL existentes tomando los nombres de las funciones predefinidas. 

Para usar la API C de SQLite no necesitamos ningún módulo especial para importar el módulo sqlite3 de python contiene esta API C, que nos permite crear y redefinir funciones SQL en Python.

La tabla que se usa aquí se puede crear usando este artículo aquí

Crear una nueva función definida por el usuario

A veces, necesitamos realizar tareas específicas varias veces, por lo que siempre es mejor crear un conjunto de tareas conocido como función, de modo que cuando estemos ejecutando una instrucción SQL podamos llamar directamente a esa función. En este caso, necesitamos crear nuestra propia función, llamadas funciones definidas por el usuario.

Para crear una función definida por el usuario en python, se utiliza SQLite create_function() .

Sintaxis:

create_function(nombre, no_de_parámetros, función)

Parámetro:

  • name: El nombre de la función que queremos darle
  • no_of_params: el número de parámetros que acepta la función. Si no_of_params se establece en -1, la función puede tomar cualquier cantidad de argumentos. 
  • func: es una función invocable de Python que se llama la función SQL dentro de una consulta.

Devoluciones:

create_function() puede devolver bytes, str, int, float y None cualquiera de los tipos admitidos por SQLite.

Primero, cree una función definida por el usuario y luego llame a create_function(), que es una clase de conexión, y simplemente pase los tres argumentos proporcionados en la sintaxis anterior: el nombre de la función, la cantidad de parámetros que acepta ‘_customFun’ y Python invocable que se llama como la función SQL dentro de una consulta. Después de la ejecución de la operación y obtener el resultado usando cursor.fetchone(). Obtenemos la salida deseada de nuestras funciones definidas por el usuario.

Ejemplo:

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()

Producción:

Bienvenido Rohit tu departamento es TI

Para redefinir funciones SQLite existentes

En algunos casos, necesitamos redefinir el funcionamiento existente de las funciones de SQLite. Por ejemplo, cambiemos la función incorporada de SQLite ‘longitud()’ para que cada vez que invoque esta función desde la consulta SQL, cuente la longitud de la string y agregue 10 a esa cuenta en lugar de solo dar la cuenta normal. 

Ejemplo:

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()

Producción:

15

Publicación traducida automáticamente

Artículo escrito por rohitpathak9665 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *