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;
|
||
|
|
||
|
"""
|