attakatara

El sitio del código de todos python, sql, xml …

Archivar en la categoría “python”

Crud + Sql, fácil en Python

Este documento es de libre acceso y uso bajo los términos expuestos en la licencia: Atribución-CompartirIgual 3.0 Venezuela (CC BY-SA 3.0 VE), https://creativecommons.org/licenses/by-sa/3.0/ve/ se agrega una copia de la misma en este repositorio.

Documento referencial con fines didácticos elaborado por jorgescalona @jorgemustaine jorgescalona@riseup.net.

Crud + Sql, fácil en Python

Crud es un acrónimo inglés (Create, Read, Update and Delete) que al español seria: Crear, Leer, Actualizar y Borrar, y lo que describe son las operaciones básicas que se pueden hacer sobre una base de datos. Sql (Structure Query Language), es un lenguaje declarativo de acceso a bases de datos relacionales. Nuestro articulo versa sobre como realizar las operaciones crud con python. Para este caso usamos sqlite3 como sistema de gestión de base de datos relacional.

Preparación del entorno python

Lo primero que debemos hacer es importar la libreria correspondiente con:

import sqlite3

(en el caso de postgresql seria: import pg). Luego se debe crear una conexión a la base de datos sobre la que actuaremos, ejemplo:

conn=sqlite3.connet('bd.sqlite')

, esto crea una instancia conn que llama al método connect de la libreria sqlite3. Ahora necesitamos crear el cursor ejemplo:

cur=conn.cursor

, esto crea una nueva instancia cur que llama al método cursor, esto nos permite ejecutar sentencias sql desde python con la siguiente sintaxis: cur.execute(”’ sentencia sql ”’ ), una vez finalizadas las operaciones sobre la base de datos es necesario cerrar el socket abierto en la interacción con: cur.close().

Operaciones crud

Crear una tabla en la bd:

CREATE TABLE users(name VARCHAR(128), email VARCHAR(128))

Crea una tabla user con los campos name y email del tipo varchar y de longitud 128 cada uno.

Insertar registros en la bd:

INSERT INTO users(name,email) values('jorge','jorge@dominio')

Inserta en la tabla users y los campos name y email los valores en la tupla values.

Eliminar registros en la bd:

DELETE FROM users WHERE email='jorge@dominio'

Elimina de la tabla user el registro coincidente con la expresión que le sigue a WHERE.

Modificar registros de la bd:

UPDATE users SET name='pedro' WHERE email='jorge@dominio'

Actualiza la tabla user y sustituye el valor del campo name para el registro coincidente con la condición despues del WHERE.

Listar o leer registros de la bd:

SELECT * FROM users

Lee todas las columnas de la tabla users

SELECT * FROM users WHERE email='jorge@dominio'

lee las columnas que conincidan con la condición luego del WHERE.

SELECT * FROM users ORDER BY email

Lista todas las columnas de la tabla users y las ordena por el campo email.

Ejemplos de scrpits en python que interactuan con bd sqlite:

import sqlite3

conn = sqlite3.connect('music.sqlite')
cur = conn.cursor()

cur.execute('DROP TABLE IF EXISTS Tracks ')
cur.execute('CREATE TABLE Tracks (title TEXT, plays INTEGER)')

conn.close()

En el script podemos ver que importa la librería para luego crear una conexión conn la base de datos music.sqlite, luego sirviendonos del cursor eliminamos la tabla tracks de existir con la instrucción sql DROP y luego crea la tabla Tracks, finaliza el script cerrando el socket, sencillo verdad 🙂

Un ejemplo más:

import sqlite3

conn = sqlite3.connect('music.sqlite')
cur = conn.cursor()

cur.execute('INSERT INTO Tracks (title, plays) VALUES ( ?, ? )', ( 'Thunderstruck', 20 ) )
cur.execute('INSERT INTO Tracks (title, plays) VALUES ( ?, ? )', ( 'My Way', 15 ) )
conn.commit()

print 'Tracks:'
cur.execute('SELECT title, plays FROM Tracks')
for row in cur:
     print row

cur.close()

Este ultimo inserta valores en la tabla Tracks y luego los lista haciendo uso de las sentencias sql INSERT y SELECT.

Enlaces consultados:

Enlaces recomendados:

Anuncios

Xpath (módulo python)

Xpath es un módulo que es parte de la librería xml.etree.ElementTree por lo general la misma se importa de la siguiente manera:

 import xml.etree.ElementTree as ET 

Xpath provee una serie de expresiones para localizar elementos en un árbol, su finalidad es proporcionar un conjunto de sintaxis, por lo que debido a su limitado alcance no se considera un motor en si mismo.

Ejemplos de uso de Xpath:

 
import xml.etree.ElementTree as ET

root = ET.fromstring(docxml)

# Elementos de nivel superior
root.findall(".")

# todos los hijos de neighbor o nietos de country en el nivel superior
root.findall("./country/neighbor")

# Nodos xml con name='Singapore' que sean hijos de 'year'
root.findall(".//year/..[@name='Singapore']")

# nodos 'year' que son hijos de etiquetas xml cuyo name='Singapore'
root.findall(".//*[@name='Singapore']/year")

# todos los nodos 'neighbor'que son el segundo hijo de su padre
root.findall(".//neighbor[2]") 

Como vemos nos permite extraer facilmente partes del xml haciendo referencia a su ubicación nodal representada a forma de path, lo que nos hace una sintaxis familiarmente sencilla a la hora de construir un paser xml.

Xpath Sintaxis:

SINTAXIS Descripción
tag Selecciona todos los elementos hijos contenidos en la etiqueta “tag”, Por ejemplo: spam, selecciona todos los elementos hijos de la etiqueta spam y así sucesivamente en un path de nodos spam/egg, /spam/egg/milk
* Selecciona todos los elementos hijos. Ejemplo: */egg, seleccionara todos los elementos nietos bajo la etiqueta egg
. Selecciona el nodo actual, este es muy usado en el inicio del path, para indicar que es un path relativo.
// Selecciona todos los sub elementos de todos los niveles bajo el nodo expresado. Por ejemplo: .//egg selecciona todos los elementos bajo egg a través de todo el arbol bajo la etiqueta
.. Selecciona el elemento padre
[@attrib] Selecciona todos los elementos que contienen el atributo tras el “@”
[@attrib=’value’] Seleccione todos los elementos para los cuales el atributo dado tenga un valor dado, el valor no puede contener comillas
[tag] Selecciona todos los elementos que contienen una etiqueta hijo llamada tag. Solo los hijos inmediatos son admitidos
[tag=’text’] Selecciona todos los elementos que tienen una etiqueta hijo llamada tag incluyendo descendientes que sean igual al texto dado
[position] Selecciona todos los elementos que se encuentran en la posición dada. La posición puede contener un entero siendo 1 la primera posición, la expresión last( ) para la ultima, o la posición relativa con respecto a la ultima posición last( )-1

notas: las expresiones entre corchetes deben ser precedidas por un nombre de etiquta, un astertisco u otro comodín. Las referencias a position deben ser precedidas por una etiqueta xml válida.

Ejemplo de uso de Xpath dentro de una sentencia xml:

 
<xpath expr="//field[@name]='is_done'" position="before">
    <field name="date_deadline" />
</xpath>

 

Enlaces consultados:

  1. referencia oficial de python sobre XPath 
  2. Documentación Odoo en español de Bachaco-VE, cápitulo 3

 

 

 

 

Navegador de artículos