Usuario:Lmorillas/modulo programacion/python/bases de datos relacionales

Usar bases de datos relacionales con Python es muy fácil. Python proporciona un estándar para acceder a bases de datos. La DB API 2.0 es la versión vigente (PEP 249) Módulos compatibles:
 * MySQLdb (MySQL)
 * psycopg2 (PostgreSQL)
 * cx_Oracle (Oracle)
 * mxODBC (SQL Server, DB2, Sybase, Oracle, etc.)

Estructura
La DB API usa dos conceptos para realizar los procesos:
 * Objeto Conexión
 * conexión con la base de datos
 * Transacciones
 * Objeto Cursor
 * Ejecuta las sentencias
 * Accede a los resultados

Conexión

 * El objeto conexión se encarga de conectar con la base de datos
 * Proporciona acceso (red/RPC) a la base de datos.
 * Este objeto no permite lanzar sentencias.
 * Gestiona las transacciones (grupos lógicos de sentencias)

Cursor

 * Creado a partir de una conexión
 * Sentencias de manipulación y de consulta en la bbdd.
 * Método execute, que acepta una secuencia de parámetros.
 * Almacena los datos del result set depués de lanzar la consulta.
 * Método fetch* que lee los datos del result set

Transacciones

 * DB API 2.0 soporta transacciones (si el motor las soporta) desde el objeto conexión.
 * conexión: commit / rollback

Introspección del esquema

 * Busca el tipo de las columnas de una tabla:
 * Método sencillo:
 * Método avanzado:

Muy importante: Paso de parámetros

 * No hay ue hacer nunca sustitución de cadenas de caracteres para evitar inyección de código.
 * Hay una variable paramstyle que define cómo se pasan los parámetros.
 * Todos los módulos admiten al menos uno de:
 * 'qmark': Signo de interrogación, ej. '...WHERE name=?'
 * 'numeric': Numerico, posicional, ej. '...WHERE name=:1'
 * 'named': por Nombre, ej. '...WHERE name=:name'
 * 'format': Formato ANSI C, ej. '...WHERE name=%s'
 * 'pyformat': Formato Python, ej. '...WHERE name=%(name)s'

Ampliación MySQL

 * Acceso a MySQL con Python

Acceso a Oracle

 * http://st-curriculum.oracle.com/obe/db/11g/r2/prod/appdev/opensrclang/python/python.htm
 * http://www.orafaq.com/wiki/Python
 * http://cx-oracle.sourceforge.net/

Configuración
set ORACLE_HOME if this environment variable doesn't exist (see this Oracle FAQ) python can find oraocci11.dll for Oracle 11g, oraocci10.dll for Oracle 10g or oraclient9.dll for Oracle 9i by adding the folder (should be %ORACLE_HOME%/bin) where the DLL is in you PATH environment variable use the correct binary package (i.e. built for the right Python/Oracle versions)

Inyección SQL :: Seguridad

 * http://www.theprojectxblog.net/manual-mysql-injection-noobz-guide/