Necesitaremos tener instalado:
- sqlite-3
- python
- modulo sqlite3 para python
Verificar que funciona todo correctamente consultando la versión:
#!/usr/bin/python
import sqlite3
print sqlite3.version
print sqlite3.sqlite_version
Usando control de errores, si la BBDD no existe la creará:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sqlite3 as sl
import sys
con = None
try:
con = sl.connect('prueba.db')
cur = con.cursor()
cur.execute('SELECT SQLITE_VERSION()')
data = cur.fetchone()
print "SQLite version: %s" % data
except sl.Error, e:
print "Error %s:" % e.args[0]
sys.exit(1)
finally:
if con:
con.close()
Usando la cláusula "with", si la BBDD no existe la creará, además al terminar se cerrará la conexión:
import sqlite3 as sl
import sys
con = sl.connect('prueba.db')
with con:
cur = con.cursor()
cur.execute('SELECT SQLITE_VERSION()')
data = cur.fetchone()
print "SQLite version: %s" % data
Insertando datos
Creamos una tabla e insertamos datos:
con = sl.connect('inversiones.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS MateriasPrimas")
cur.execute("CREATE TABLE MateriasPrimas(Id INT, Symbol TEXT, Name TEXT, PriceB REAL, PriceS REAL)")
cur.execute("INSERT INTO MateriasPrimas VALUES(1,'CL','Petroleo',49.66,49.62)")
cur.execute("INSERT INTO MateriasPrimas VALUES(2,'XAU','Oro',1285.62,1284.16)")
cur.execute("INSERT INTO MateriasPrimas VALUES(3,'NG','Gas Natural',3.196,3.192)")
cur.execute("INSERT INTO MateriasPrimas VALUES(4,'XAG','Plata',17.959,17.930)")
cur.execute("INSERT INTO MateriasPrimas VALUES(5,'CC','Cacao',1852,1844)")
cur.execute("INSERT INTO MateriasPrimas VALUES(6,'KC','Cafe',130.43,129.62)")
cur.execute("INSERT INTO MateriasPrimas VALUES(7,'ZC','Maiz',357.61,356.12)")
cur.execute("INSERT INTO MateriasPrimas VALUES(8,'ZW','Trigo',405.38,404.88)")
Verificando:
$ sqlite3 inversiones.db
sqlite> .tables
MateriasPrimas
sqlite> .mode column
sqlite> .headers on
sqlite> select * from MateriasPrimas;
Id Symbol Name PriceB PriceS
---------- ---------- ---------- ---------- ----------
1 CL Petroleo 49.66 49.62
2 XAU Oro 1285.62 1284.16
3 NG Gas Natura 3.196 3.192
4 XAG Plata 17.959 17.93
5 CC Cacao 1852.0 1844.0
6 KC Cafe 130.43 129.62
7 ZC Maiz 357.61 356.12
8 ZW Trigo 405.38 404.88
Insertando un array:
materiasprimas = (
(1,'CL','Petroleo',49.66,49.62),
(2,'XAU','Oro',1285.62,1284.16),
(3,'NG','Gas Natural',3.196,3.192),
(4,'XAG','Plata',17.959,17.930),
(5,'CC','Cacao',1852,1844),
(6,'KC','Cafe',130.43,129.62),
(7,'ZC','Maiz',357.61,356.12),
(8,'ZW','Trigo',405.38,404.88)
)
con = sl.connect('inversiones.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS MateriasPrimas")
cur.execute("CREATE TABLE MateriasPrimas(Id INT, Symbol TEXT, Name TEXT, PriceB REAL, PriceS REAL)")
cur.executemany("INSERT INTO MateriasPrimas VALUES(?,?,?,?,?)",materiasprimas)
Podemos declarar una columna como "INTEGER PRIMARY KEY" y se generará una columna con autoincremento:
materiasprimas = (
('XAU','Oro',1285.62,1284.16),
('XAG','Plata',17.959,17.930),
('NG','Gas Natural',3.196,3.192),
('CC','Cacao',1852,1844),
('KC','Cafe',130.43,129.62),
('CL','Petroleo',49.66,49.62),
('ZC','Maiz',357.61,356.12),
('ZW','Trigo',405.38,404.88)
)
con = sl.connect('inversiones.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS MateriasPrimas")
cur.execute("CREATE TABLE MateriasPrimas(Id INTEGER PRIMARY KEY, Symbol TEXT, Name TEXT, PriceB REAL, PriceS REAL)")
cur.executemany("INSERT INTO MateriasPrimas(Symbol,Name,PriceB,PriceS) VALUES(?,?,?,?)",materiasprimas)
Leyendo datos
Para leer datos, se puede usar el nombre de la columna o su posición:
con = sl.connect('inversiones.db')
with con:
con.row_factory = sl.Row
cur = con.cursor()
cur.execute("SELECT * FROM MateriasPrimas")
rows = cur.fetchall()
for row in rows:
print "%s %s %s %s %s" % (row["Id"], row ["Symbol"], row["Name"], row[3], row[4])
Podemos modificar datos al igual que en cualquier BBDD:
uSymbol = 'CL'
uPriceS = 49.50
con = sl.connect('inversiones.db')
with con:
cur = con.cursor()
cur.execute("UPDATE MateriasPrimas SET PriceS=? WHERE Symbol=?",(uPriceS,uSymbol))
con.commit()
print "Columnas modificadas: %d" % cur.rowcount
Usando "bind" variables
Podemos definir una consulta y usarla múltiples veces con distintos valores usando variables BIND:
uSymbol = 'CL'
con = sl.connect('inversiones.db')
with con:
cur = con.cursor()
cur.execute("SELECT Name, PriceB, PriceS FROM MateriasPrimas WHERE Symbol=:Symbol",{"Symbol":uSymbol})
con.commit()
row = cur.fetchone()
print row
No hay comentarios:
Publicar un comentario