Apuntes_Python/01_curso/Modulo_4/4-3b_conexiones_a_bd.py
2022-12-24 22:41:20 -03:00

97 lines
2.3 KiB
Python

"""
Conexiones a base de datos
"""
import sqlite3
import hashlib
# Conexión a base de datos
conn = sqlite3.connect(':memory:')
"Cursor: Objeto cursor"
cursor = conn.cursor()
# Crear tabla
cursor.execute("""CREATE TABLE moneda
(ID integer primary key, nombre text, simbolo text)""")
"commit(): hace un commit de la transancción"
conn.commit()
"""
EXECUTE:
atajo q crea un cursor y ejectua la consulta
(metodo excecute del cursor, devuelve el cursor)
execute many, lo mismo pero con múliples consultas
"""
# Insertar datos de monedas
cursor.execute("INSERT INTO moneda VALUES (1, 'Peso (CLP)', '$')")
cursor.execute("INSERT INTO moneda VALUES (2, 'Dólar (USD)', 'U$')")
"rollback(): revertir cambios, al último commit"
conn.rollback()
# Consultar monedas
query = "SELECT * FROM moneda"
# Obtener la respuesta (filas)
monedas = cursor.execute(query).fetchall()
print(monedas)
# Cerrar conexión a la base de datos
conn.close()
"""
Create Function
Permite crear una función personalizada, para ser usada dentro
las sentencias SQL, usando el nombre de la función.
Puede devolver cualquier valor soportado por SQLite:
-BYTE -STRING -INT -FLOAT -NONE
Create Agregate
Permite crear una función de 'agregación', para esto de debe definir
una clase que implemente los metodo STEP y FINALIZE.
Finalize, devuelve el resultado de la 'agregación'.
puede devolver cualquier tipo de dato soportado por SQLite.
"""
# Crear función
def md5sum(t):
return hashlib.md5(t).hexdigest()
conn = sqlite3.connect(':memory:')
# create_function()
conn.create_function("md5", 1, md5sum)
cursor = conn.cursor()
# (?) es reemplazado por "a md5 hash"
cursor.execute("select md5(?)", (b"a md5 hash",))
print(cursor.fetchone()[0])
conn.close()
# Ejemplo Agregación
class MiSum:
def __init__(self):
self.cont = 0
def step(self, valor):
self.cont += valor
def finalize(self):
return self.cont
conn = sqlite3.connect(':memory:')
conn.create_aggregate("misum", 1, MiSum)
cursor = conn.cursor()
cursor.execute("CREATE TABLE test(i)")
cursor.execute("INSERT INTO test(i) VALUES (1)")
cursor.execute("INSERT INTO test(i) VALUES (2)")
cursor.execute("SELECT MiSum(i) FROM test")
print(cursor.fetchone()[0])
conn.close()