User Tools

Site Tools


python:bd

Bases de datos

Gracias a la estandarización de las conexiones a bases de datos mediante el módulo DB-API, las instrucciones que se han de llamar y ejecutar para la conexión con estas son todas iguales.

Aunque la base de datos esté lista para realizar autocommit con las transacciones, es aconsejable ejecutar un commit() de la conexión, para mayor flexibilidad de cambios en el programa con otras bases de datos.

import sqlite3
 
# Conectamos
conn = sqlite3.connect("base_de_datos")
 
c = conn.cursor()     # creamos un cursor
 
c.execute("query")    # No devuelven nada: INSERT, CREATE, UPDATE, DELETE
                      # Si devuelve cosas SELECT
 
# Para recoger datos
res = c.fetchone();
res = c.fetchall();
 
# Se trabaja con memoria
# Para guardar los datos realmente se hace un commit
conn.commit()

Ejemplo

cur = conn.cursor()
cur.execute("CREATE TABLE libro(nombre TEXT, paginas integer, autor text)")
cur.execute("INSERT INTO libro VALUES('quijote', 200, 'cervantes')")
cur.execute("INSERT INTO libro VALUES('cabra', 5478, 'sdfh')")
cur.execute("INSERT INTO libro VALUES('lalilo', 5478, 'nejo')")
cur.execute("INSERT INTO libro VALUES('jandemor', 300, 'caueren')")
conn.commit()
cur.execute("SELECT * from libro")
a = cur.fetchall()
print a
[(u'quijote', 200, u'cervantes'), (u'cabra', 5478, u'sdfh'), (u'lalilo', 5478, u
'nejo'), (u'jandemor', 300, u'caueren')]

A la hora de sanitizar las variables con las que ejecutaremos las SQL, deberemos seguir el formato que tenga la base de datos con la que estemos trabajando, para que lo haga el módulo automaticamente por nosotros y no tengamos que crear ninguna función nuestra alternativa:

>>> import MySQLdb
>>> print MySQLdb.paramstyle
format

format nos indica que para poder sanitizar automáticamente nuestras queries, deberemos seguir la sintaxis correspondiente. A continuación se listan todas las posibles:

# qmark: interrogaciones. 
SQL =SELECT ALL FROM t WHERE valor=?” 
 
# NUMERIC: un número indicando la posición. 
SQL =SELECT ALL FROM t WHERE valor=:1” 
 
# named: el nombre del valor.
SQL =SELECT ALL FROM t WHERE valor=:valor” 
 
# format: especificadores de formato similares a los del printf de C. 
SQL =SELECT ALL FROM t WHERE valor=%s” 
 
# pyformat: SIMILAR al anterior, pero con las extensiones de Python. 
SQL =SELECT ALL FROM t WHERE valor=%(valor)
# ejemplo qmark
cursor.execute(“””select * from sucursales where ciudad=?”””, (ciudad,))
 
# ejemplo format
cursor.execute(“””select * from sucursales where ciudad=%s”””, (ciudad,))

Referencias

python/bd.txt · Last modified: 2009/08/09 16:31 by nejo