Trabajando con PostgreSQL en Python

    Introducci贸n

    PostgreSQL es uno de los sistemas de gesti贸n de bases de datos relacionales m谩s avanzados y utilizados. Es extremadamente popular por muchas razones, algunas de las cuales incluyen que sea de c贸digo abierto, su extensibilidad y su capacidad para manejar muchos tipos diferentes de aplicaciones y cargas variables.

    Con Python, puede establecer f谩cilmente una conexi贸n a su base de datos PostgreSQL. Hay muchos controladores de Python para PostgreSQL, siendo “psycopg” el m谩s popular. Su versi贸n actual es psycopg2.

    En este art铆culo, discutiremos c贸mo acceder a una base de datos PostgreSQL en Python usando el controlador psycopg2.

    El m贸dulo psycopg2

    Podemos integrar Postgres con Python usando el psycopg2 m贸dulo. psycopg2 es un adaptador de base de datos de Postgres para Python. Para utilizar este m贸dulo, primero debe instalarlo. Esto se puede hacer usando el pip comando, como se muestra a continuaci贸n:

    $ pip3 install psycopg2
    

    Tenga en cuenta que estoy usando Python 3.5, por lo tanto, he usado pip3 en vez de pip.

    Una vez que se ha instalado el m贸dulo, puede usarlo para conectarse a su base de datos en su aplicaci贸n.

    Conectarse a una base de datos

    Para conectarse a su base de datos, primero debe crear un objeto de conexi贸n que represente la base de datos. A continuaci贸n, debe crear un objeto cursor para ayudarlo en la ejecuci贸n de sus declaraciones SQL.

    El siguiente ejemplo demuestra c贸mo establecer una conexi贸n a la base de datos llamada “postgres”:

    import psycopg2
    
    con = psycopg2.connect(database="postgres", user="postgres", password="", host="127.0.0.1", port="5432")
    
    print("Database opened successfully")
    

    Salida:

    Database opened successfully
    

    La siguiente es la lista de par谩metros que se han pasado al connect() m茅todo:

    • database: El nombre de la base de datos a la que necesita conectarse.
    • user: El nombre de usuario que se utilizar谩 para la autenticaci贸n.
    • password: La contrase帽a de la base de datos del usuario.
    • host: La direcci贸n del servidor de la base de datos. Por ejemplo, un nombre de dominio, “localhost” o una direcci贸n IP.
    • port: El n煤mero de puerto. Si no lo proporciona, se utilizar谩 el predeterminado, que es 5432.

    Tenga en cuenta que los valores de los par谩metros anteriores deben ser correctos para que la conexi贸n se realice correctamente. De lo contrario, se generar谩 una excepci贸n. La salida del c贸digo anterior muestra que la conexi贸n a la base de datos se ha establecido correctamente.

    Crear una tabla

    Para crear una tabla de Postgres en Python, usamos el CREATE TABLE Declaraci贸n SQL. Esta consulta debe ejecutarse despu茅s de establecer una conexi贸n a la base de datos. Tambi茅n creamos un objeto cursor llamando al cursor() m茅todo que pertenece al connection objeto. Esta cursor El objeto se utiliza para ejecutar realmente sus comandos.

    Luego llamamos al execute() m茅todo del cursor objeto para ayudarnos a crear la tabla. Finalmente, necesitamos confirmar y cerrar la conexi贸n. “Confirmar” la conexi贸n le dice al conductor que env铆e los comandos a la base de datos.

    El siguiente ejemplo demuestra esto:

    import psycopg2
    
    con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432")
    print("Database opened successfully")
    
    cur = con.cursor()
    cur.execute('''CREATE TABLE STUDENT
          (ADMISSION INT PRIMARY KEY     NOT NULL,
          NAME           TEXT    NOT NULL,
          AGE            INT     NOT NULL,
          COURSE        CHAR(50),
          DEPARTMENT        CHAR(50));''')
    print("Table created successfully")
    
    con.commit()
    con.close()
    

    Salida

    Database opened successfully
    Table created successfully
    

    los commit() El m茅todo nos ayuda a aplicar los cambios que hemos realizado en la base de datos, y estos cambios no se pueden deshacer si commit() se ejecuta con 茅xito. los close() El m茅todo cerrar谩 la conexi贸n a la base de datos.

    En este punto, hemos creado una tabla con 4 columnas, todas las cuales tienen varios tipos de datos. El resultado anterior muestra que la tabla se cre贸 correctamente.

    Insertar datos

    Podemos insertar un solo registro o varios registros en una tabla de base de datos de Postgres. Nuevamente, primero debemos establecer una conexi贸n con el servidor de la base de datos llamando al connect() funci贸n. A continuaci贸n, deber铆amos crear un objeto cursor llamando al cursor() m茅todo. Por 煤ltimo, deber铆amos ejecutar el INSERT declaraci贸n a trav茅s del execute() m茅todo para agregar los datos a la tabla.

    Aqu铆 hay un ejemplo de esto en acci贸n:

    import psycopg2
    
    con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432")
    print("Database opened successfully")
    
    cur = con.cursor()
    
    cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3420, 'John', 18, 'Computer Science', 'ICT')");
    
    con.commit()
    print("Record inserted successfully")
    con.close()
    

    Salida

    Database opened successfully
    Record inserted successfully
    

    Despu茅s de ejecutar este c贸digo, hemos insertado un solo registro en nuestra tabla de base de datos. Esto se hizo especificando el nombre de la tabla, as铆 como las columnas en las que necesitamos insertar los datos. Tambi茅n es posible que insertemos varios registros con un solo comando. Por ejemplo:

    import psycopg2
    
    con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432")
    print("Database opened successfully")
    
    cur = con.cursor()
    
    cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3419, 'Abel', 17, 'Computer Science', 'ICT')");
    cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3421, 'Joel', 17, 'Computer Science', 'ICT')");
    cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3422, 'Antony', 19, 'Electrical Engineering', 'Engineering')");
    cur.execute("INSERT INTO STUDENT (ADMISSION,NAME,AGE,COURSE,DEPARTMENT) VALUES (3423, 'Alice', 18, 'Information Technology', 'ICT')");
    
    con.commit()
    print("Records inserted successfully")
    con.close()
    

    Salida

    Database opened successfully
    Records inserted successfully
    

    Desde el commit() no se llama al m茅todo hasta que “ejecutamos” todos los INSERT declaraciones, varios registros se insertan con una sola llamada del commit() m茅todo.

    Recuperando datos

    Puede seleccionar datos de una base de datos de Postgres y ver los registros de la tabla. Primero, debe establecer una conexi贸n a la base de datos utilizando el connect() funci贸n. A continuaci贸n, se debe crear un nuevo cursor llamando al cursor() m茅todo. El objeto de cursor creado se puede utilizar para ejecutar la SELECT declaraci贸n para consultar datos de la base de datos.

    Por ejemplo:

    import psycopg2
    
    con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432")
    print("Database opened successfully")
    
    cur = con.cursor()
    cur.execute("SELECT admission, name, age, course, department from STUDENT")
    rows = cur.fetchall()
    
    for row in rows:
        print("ADMISSION =", row[0])
        print("NAME =", row[1])
        print("AGE =", row[2])
        print("COURSE =", row[3])
        print("DEPARTMENT =", row[4], "n")
    
    print("Operation done successfully")
    con.close()
    

    Salida

    Database opened successfully
    ADMISSION = 3420
    NAME = John
    AGE = 18
    COURSE = Computer Science
    DEPARTMENT = ICT
    
    ADMISSION = 3419
    NAME = Abel
    AGE = 17
    COURSE = Computer Science
    DEPARTMENT = ICT
    
    ADMISSION = 3421
    NAME = Joel
    AGE = 17
    COURSE = Computer Science
    DEPARTMENT = ICT
    
    ADMISSION = 3422
    NAME = Antony
    AGE = 19
    COURSE = Electrical Engineering
    DEPARTMENT = Engineering
    
    ADMISSION = 3423
    NAME = Alice
    AGE = 18
    COURSE = Information Technology
    DEPARTMENT = ICT
    
    Operation done successfully
    

    Aqu铆 hemos recuperado datos de la base de datos especificando la tabla y los nombres de las columnas que necesitamos recuperar de la tabla de la base de datos. Estos datos se nos devuelven como una lista de tuplas, siendo la lista de “nivel superior” las filas de datos. Entonces, cada fila es una tupla de los datos de la columna. Si no se devuelven filas para la consulta, se devuelve una lista vac铆a por fetchall().

    Actualizar tablas

    Podemos actualizar o modificar los detalles de un registro que ya ha sido insertado en una tabla de base de datos. Primero, tenemos que establecer una conexi贸n a la base de datos usando el connect() m茅todo. A continuaci贸n, llamamos al cursor() funci贸n para crear un objeto cursor. Finalmente, ejecutamos el execute() m茅todo para ejecutar el UPDATE declaraci贸n con valores de entrada.

    Por ejemplo:

    import psycopg2
    
    con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432")
    print("Database opened successfully")
    
    cur = con.cursor()
    
    cur.execute("UPDATE STUDENT set AGE = 20 where ADMISSION = 3420")
    con.commit()
    print("Total updated rows:", cur.rowcount)
    
    cur.execute("SELECT admission, age, name, course, department from STUDENT")
    rows = cur.fetchall()
    for row in rows:
        print("ADMISSION =", row[0])
        print("NAME =", row[1])
        print("AGE =", row[2])
        print("COURSE =", row[2])
        print("DEPARTMENT =", row[3], "n")
    
    print("Operation done successfully")
    con.close()
    

    Salida

    Database opened successfully
    Total updated rows: 1
    ADMISSION = 3419
    NAME = 17
    AGE = Abel
    COURSE = Abel
    DEPARTMENT = Computer Science
    
    ADMISSION = 3421
    NAME = 17
    AGE = Joel
    COURSE = Joel
    DEPARTMENT = Computer Science
    
    ADMISSION = 3422
    NAME = 19
    AGE = Antony
    COURSE = Antony
    DEPARTMENT = Electrical Engineering
    
    ADMISSION = 3423
    NAME = 18
    AGE = Alice
    COURSE = Alice
    DEPARTMENT = Information Technology
    
    ADMISSION = 3420
    NAME = 20
    AGE = John
    COURSE = John
    DEPARTMENT = Computer Science
    
    Operation done successfully
    

    En el ejemplo anterior, hemos actualizado el valor de la columna AGE para todas las filas donde el ADMISSION es 3420. Despu茅s de ejecutar la actualizaci贸n, recuperamos estos datos para verificar que se hayan actualizado las filas / columnas correspondientes.

    Eliminar filas

    Para eliminar un registro de una tabla de la base de datos de Postgres, primero debemos establecer una conexi贸n con el servidor de la base de datos. En segundo lugar, se debe crear un objeto de cursor llamando al cursor() funci贸n. Luego ejecutamos el DELETE declaraci贸n para realizar la eliminaci贸n.

    Por ejemplo:

    import psycopg2
    
    con = psycopg2.connect(database="postgres", user="postgres", password="Kaliakakya", host="127.0.0.1", port="5432")
    print("Database opened successfully")
    
    cur = con.cursor()
    
    cur.execute("DELETE from STUDENT where ADMISSION=3420;")
    con.commit()
    print("Total deleted rows:", cur.rowcount)
    
    cur.execute("SELECT admission, name, age, course, department from STUDENT")
    rows = cur.fetchall()
    for row in rows:
        print("ADMISSION =", row[0])
        print("NAME =", row[1])
        print("AGE =", row[2])
        print("COURSE =", row[3])
        print("DEPARTMENT =", row[4], "n")
    
    print("Deletion successful")
    con.close()
    

    Salida

    Database opened successfully
    Total deleted rows: 1
    ADMISSION = 3419
    NAME = Abel
    AGE = 17
    COURSE = Computer Science
    DEPARTMENT = ICT
    
    ADMISSION = 3421
    NAME = Joel
    AGE = 17
    COURSE = Computer Science
    DEPARTMENT = ICT
    
    ADMISSION = 3422
    NAME = Antony
    AGE = 19
    COURSE = Electrical Engineering
    DEPARTMENT = Engineering
    
    ADMISSION = 3423
    NAME = Alice
    AGE = 18
    COURSE = Information Technology
    DEPARTMENT = ICT
    
    Deletion successful
    

    En este ejemplo hemos eliminado todos los registros donde el n煤mero de admisi贸n del estudiante es 3420, que en este caso es solo una fila. Despu茅s de recuperar los datos usando SELECT, podemos ver que este registro no es parte de la salida anterior, lo que confirma que se ha eliminado de la base de datos.

    Conclusi贸n

    Con Python, hay varias formas de acceder a una base de datos PostgreSQL. Hay muchos controladores de bases de datos para Python que podemos usar para este prop贸sito, pero psycopg es el m谩s popular. En este art铆culo, mostramos c贸mo instalar el m贸dulo, establecer una conexi贸n con su base de datos PostgreSQL y ejecutar consultas SQL comunes usando c贸digo Python.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *