conexion con python e insertar


DATABASE.INI

--------------------------------------------
[postgresql]
host=localhost
database=suppliers
user=postgres
password=990111


CONFIG.PY
-------------------------------------------
#coding: utf-8

from configparser import ConfigParser


def config(filename='database.ini', section='postgresql'):
    # crear un parser.
    parser = ConfigParser()
    # leer el archivo de configuración
    parser.read(filename)

    # obtener la section, por defecto es postgresql.
    db = {}
    if parser.has_section(section):
        params = parser.items(section)
        for param in params:
            db[param[0]] = param[1]
    else:
        raise Exception('Section {0} not found in the {1} file.'.format(section,filename))

    return db


CONNECT.PY
-------------------------------------------
# coding: utf-8
import psycopg2
from config import config
def connect():
    """
        Conecta con la base de datos del servidor.
    """
    conn = None
    try:
        # lee los parámetros de la conexión.
        params = config()
        # conecta con el server de PostgreSQL.
        print("Conectando con la base de datos de PostgreSQL")
        conn = psycopg2.connect(**params)
        # crear un cursor.
        cur = conn.cursor()
        # ejecuta una declaración.
        print("versión de la base de datos de PostgreSQL: ")
        cur.execute("SELECT version()")
        # muestra la versión del servidor de base de datos PostgreSQL.
        db_version = cur.fetchone()
        print(db_version)

        # cierra la comunicación con PostgreSQL
        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is None:
            conn.close()
            print('Database connection closed.')

if __name__ == '__main__':
    connect()






CREAR TABLAS
-------------------------------------------
import psycopg2
from config import config

def create_tables():
    """ crear tablas en la base de datos PostgreSQL"""
    commands = (
        """
        CREATE TABLE vendors (
            vendor_id SERIAL PRIMARY KEY,
            vendor_name VARCHAR(255) NOT NULL
        )
        """,
        """ CREATE TABLE parts (
                part_id SERIAL PRIMARY KEY,
                part_name VARCHAR(255) NOT NULL
                )
        """,
        """
        CREATE TABLE part_drawings (
                part_id INTEGER PRIMARY KEY,
                file_extension VARCHAR(5) NOT NULL,
                drawing_data BYTEA NOT NULL,
                FOREIGN KEY (part_id)
                REFERENCES parts (part_id)
                ON UPDATE CASCADE ON DELETE CASCADE
        )
        """,
        """
        CREATE TABLE vendor_parts (
                vendor_id INTEGER NOT NULL,
                part_id INTEGER NOT NULL,
                PRIMARY KEY (vendor_id , part_id),
                FOREIGN KEY (vendor_id)
                    REFERENCES vendors (vendor_id)
                    ON UPDATE CASCADE ON DELETE CASCADE,
                FOREIGN KEY (part_id)
                    REFERENCES parts (part_id)
                    ON UPDATE CASCADE ON DELETE CASCADE
        )
        """)
    conn = None
    try:

        params = config()
        # Conecta con el servidor.
        conn = psycopg2.connect(**params)
        cur = conn.cursor()
        # Crea una tabla uno a uno
        for command in commands:
            cur.execute(command)

        cur.close()
        # hace commit a los cambios.
        conn.commit()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()


if __name__ == '__main__':
    create_tables()





INSERTAR
-------------------------------------------
# coding: utf-8

# Para esta demostración, usaremos la tabla 'vendors' en la tabla 'suppliers'.
# -----------------
# |    Vendors    |
# -----------------
# |  * vendor_id  |
# |   vendor_name |
# -----------------
#
# El método siguiente inserta una nueva fila en la tabla 'vendors' y retorna el nuevo valor generado de 'vendor_id'.

import psycopg2
from config import config  # Este es el archivo que se creó primero en la presentación de powerpoint.


def insert_vendor(vendor_name):
    # Inserta un nuevo vendedor en la tabla 'vendors'.
    sql = """INSERT INTO vendors(vendor_name)
             VALUES(%s) RETURNING vendor_id;"""
    conn = None
    vendor_id = None

    try:
        # Lee la configuración de la base de datos.
        params = config()
        # Conecta con la base de datos de postgres.
        conn = psycopg2.connect(**params)
        # Crea un nuevo cursor.
        cur = conn.cursor()
        # Ejecuta el comando INSERT.
        cur.execute(sql, (vendor_name,))
        # Devuelve el id generado.
        vendor_id = cur.fetchone()[0]
        # Hace un commit a los cambios en la base de datos.
        conn.commit()
        # Cierra la comunicación con la base de datos.
        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()

    print(vendor_id)


# El siguiente método ingresa multiples líneas en una tabla.
# Es similar a insertar una nueva linea, con la excepción de que en lugar de llamar al método
# execute(), llamamos a executemany().
def insert_vendor_list(vendor_list):
    sql = "INSERT INTO vendors(vendor_name) VALUES(%s)"
    conn = None
    try:
        # Lee la configuración de la base de datos
        params = config()
        # Connecta con la base de datos de PostgreSQL.
        conn = psycopg2.connect(**params)
        # Crea un nuevo cursor.
        cur = conn.cursor()
        # Ejecuta el comando INSERT.
        # con executemany()
        cur.executemany(sql, vendor_list)
        # Hace un commit a los cambios a la base de datos.
        conn.commit()
        # Cierra la comunicación con la base de datos.
        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()


# Ejecución.
if __name__ == '__main__':
    # Inserta un vendedor.
    insert_vendor("3M Co.")
    # Inserta multiples vendedores.
    insert_vendor_list([
        ('AKM Semiconductor Inc.',),
        ('Asahi Glass Co Ltd.',),
        ('Daikin Industries Ltd.',),
        ('Dynacast International Inc.',),
        ('Foster Electric Co. Ltd.',),
        ('Murata Manufacturing Co. Ltd.',)
    ])




-------------------------------------------


Comentarios

Entradas populares de este blog

2.1.1 Estructura de Memoria y Procesos de la Instancia Introducción

2.1.7 Procedimiento para configuración de un DBMS

2.1.4 Instalación del software de Base Datos en modo transaccional