99 lines
2.3 KiB
Python
99 lines
2.3 KiB
Python
"""
|
|
Manejo de Bases de Datos en Python
|
|
|
|
librería SQLite3 (parte de la biblioteca estandar de Python):
|
|
|
|
Hecha en C, provee una BD liviana basada en un archivo,
|
|
se guarda en el disco, y no requiere de un proceso aparte,
|
|
permite el acceso a la BD usando una variante no standard
|
|
de lenguaje SQL.
|
|
También permite trabjabar con una base de datos en memoria.
|
|
|
|
ej.
|
|
"""
|
|
import sqlite3
|
|
|
|
# Conexión a base de datos
|
|
conn = sqlite3.connect(':memory:')
|
|
|
|
# Cursor
|
|
cursor = conn.cursor()
|
|
|
|
# Crear tabla
|
|
cursor.execute("""CREATE TABLE moneda
|
|
(ID integer primary key, nombre text, simbolo text)""")
|
|
|
|
# Insertar datos de monedas
|
|
cursor.execute("INSERT INTO moneda VALUES (1, 'Peso (CLP)', '$')")
|
|
cursor.execute("INSERT INTO moneda VALUES (2, 'Dólar (USD)', 'U$')")
|
|
|
|
# Guardar cambios
|
|
conn.commit()
|
|
|
|
# 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()
|
|
|
|
"""
|
|
___________________________________
|
|
|Tipo de Python | Tipo de SQLite |
|
|
|-----------------+-----------------|
|
|
| None | NULL |
|
|
| int | INTEGER |
|
|
| float | REAL |
|
|
| str | TEXT |
|
|
| bytes | BLOB |
|
|
+-----------------+-----------------+
|
|
|
|
SQLite puede almacenar tipos de datos adicionales usando adaptadores.
|
|
SQLite3 convierte tipos de SQLite a diferentes tipos de Python por medio de conversores.
|
|
|
|
# Ejemplo adaptador:
|
|
import sqlite3
|
|
|
|
class Point:
|
|
def __init__(self, x, y):
|
|
self.x, self.y = x,y
|
|
|
|
def __conform__(self, protocol):
|
|
if protocol is sqlite3.PrepareProtocol:
|
|
return "%f,%f" % (self.x, self.y)
|
|
|
|
con = sqlite3.connect(":memory:")
|
|
cur = con.cursor()
|
|
p = Point(5.2, -3.5)
|
|
cur.execute("select ?", (p,))
|
|
print(cur.fetchone()[0])
|
|
|
|
# Conversores y adaptadores...
|
|
|
|
# apunte migración
|
|
|
|
--Crear BD
|
|
BEGIN TRANSACTION;
|
|
|
|
CREATE TABLE IF NOT EXISTS 'moneda' (
|
|
'codigo' TEXT,
|
|
'nombre' text,
|
|
'symbol' text,
|
|
PRIMARY KEY('codigo')
|
|
);
|
|
|
|
COMMIT;
|
|
|
|
--Agregar campo 'factor'
|
|
BEGIN TRANSACTION;
|
|
|
|
ALTER TABLE 'moneda'
|
|
ADD 'factor' REAL;
|
|
|
|
COMMIT;
|
|
|
|
"""
|