attakatara

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

Archivar en la categoría “sql”

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

¿Usuario O role?

Basta leer un tutorial de instalación y configuración de PostgreSQL y tal cual como recetas nos indican paso a paso un sencillo procedimiento para tener todo a tono en nuestros sistemas basados en UNIX, uno de mis favoritos y el cual recomiendo es el de Caballero [1].

Una de las confusiones que siempre me han embargado es que al instalar el sistema automáticamente se crea un usuario de entorno Unix llamado postgres el cual por cuestiones de seguridad se nos pide que se le cambie su password de forma inmediata. Y luego se nos pide que logueados como este entremos a la cli de psql para crear un role postgres con la orden sql ALTER ROLE. Si lo tomo como receta o píldora puede ser que no tenga problemas de funcionamiento alguno, ahora bien si no lo entiendo como creo que a la mayoría nos pasa (por novatada o newbie), puede ser que crea luego necesitar crear un role para otro usuario y que por simetría crea necesario también crear su respectivo usuario de entorno UNIX, esto ultimo puede traer consecuencias considerables de seguridad al sistema entre otras cosas y de eso quiero que vaya este post.

Empecemos por definir cada uno de ellos y luego vemos si podemos relacionarles. Según [2]:

El sistema Unix es un sistema operativo multiusuario. Linux está basado en el sistema Unix. Para que múltiples usuarios puedan hacer uso del sistema de una forma segura y ordenada, es necesario que el sistema disponga de mecanismos de administración y seguridad para proteger los datos de cada usuario, así como para proteger y asegurar el correcto funcionamiento del sistema.

Siendo así podemos dilucidar que postgres necesita un usuario Unix ya que ejecutara una serie de funciones sobre el entorno para crear y mantener la disponibilidad de los clusters de datos (almacenes de datos, colección de bases de datos), esto es sencillo verlo si ejecutamos comandos desde psql y en una consola aparte con top podemos ver en la imagen que se ejecutan procesos con PID especifico en este caso el 13774 y que a su vez se relacionan con el usuario postgres. Hasta este punto todo bien sin ir a las entrañas técnicas del funcionamiento ya develamos el uso del usuario cada vez que accedemos al cluster de datos sea bien a través de sql directamente o de forma indirecta con alguna aplicación que realice un socket (conexión entre uns app y la bd), a este.

uOr1

Esta bien, ¿Y el role?, este último puede ser pensado como un usuario o un grupo de estos, no están relacionados directamente a una base de datos sino a todo el cluster (puedes imaginar el cluster como un apilamiento de base de datos), los roles son guardados en una tabla de catálogo denominada pg_roles, haciendo una consulta sobre ella con SELECT podemos ver los roles existentes en el cluster especifico o con los comandos: \dg o \du, en la imagen podemos constatar que la salida de ambos nos suministra la información sobre los roles en el sistema.

uOr2

Para finalizar podemos concluir que el usuario tiene una pertinencia operativa sobre el sistema Unix mientras que dicha capacidad para el role se reduce al cluster de datos, podemos tomar en cuenta otras consideraciones respecto a la seguridad o a que debe hacer un role especifico o que no debe hacer, lo cual es un criterio nada subjetivo y que dependerá del uso de cada sistema en particular, pueden existir ciertos consejos pero exceden el alcance de este post, los mismos espero tratarlos en próximas publicaciones.

Agradecido con la conversa constructiva con el amigo Javier León @jelitox.

[1] https://lcaballero.wordpress.com/2013/03/01/instalacion-de-postgresql-en-debian-gnulinux-wheezy/

[2] http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m1/usuarios_y_grupos_de_usuarios_en_linux.html

Navegador de artículos