¿Cómo escribir Pandas DataFrame en la tabla PostgreSQL?

En este artículo, veremos algunos métodos para escribir marcos de datos de Pandas en tablas de PostgreSQL en Python.

Método 1: Usar la función to_sql()

La función to_sql se usa para escribir el marco de datos dado en una base de datos SQL.

Sintaxis 

df.to_sql(‘data’, con=conn, if_exists=’replace’, index=False)

Parámetros:

  • datos: nombre de la tabla.
  • con: conexión a la base de datos.
  • if_exists: si la tabla existe o no. “reemplazar” o “añadir”.
  • índice: Verdadero o Falso.

Ejemplo:

En el ejemplo que se muestra a continuación, importamos los paquetes y módulos necesarios, establecemos una conexión a la base de datos de PostgreSQL y convertimos el marco de datos en una tabla de PostgreSQL utilizando el método to_sql(). Finalmente, todas las filas se recuperan utilizando el método fetchall().

Para acceder al archivo CSV utilizado haga clic aquí .

Python3

# import packages
import psycopg2
import pandas as pd
from sqlalchemy import create_engine
  
# establish connections
conn_string = 'postgres://postgres:pass@127.0.0.1/Airlines_Database'
  
db = create_engine(conn_string)
conn = db.connect()
conn1 = psycopg2.connect(
    database="Airlines_Database",
  user='postgres', 
  password='pass', 
  host='127.0.0.1', 
  port= '5432'
)
  
conn1.autocommit = True
cursor = conn1.cursor()
  
# drop table if it already exists
cursor.execute('drop table if exists airlines_final')
  
sql = '''CREATE TABLE airlines_final(id int ,
day int ,airline char(20),destination char(20));'''
  
cursor.execute(sql)
  
# import the csv file to create a dataframe
data = pd.read_csv("airlines_final.csv")
  
data = data[["id","day","airline","destination"]]
# Create DataFrame
print(data)
  
# converting data to sql
data.to_sql('airlines_final', conn, if_exists= 'replace')
  
# fetching all rows
sql1='''select * from airlines_final;'''
cursor.execute(sql1)
for i in cursor.fetchall():
    print(i)
  
conn1.commit()
conn1.close()

Producción:

Método 2: Usando la función execute_values()

La función execute_values() de la biblioteca psycopg2 se usa para obtener la tabla de postgres del marco de datos dado.

Sintaxis:

psycopg2.extras.execute_values(cur, sql, argslist, template=Ninguno, page_size=100, fetch=False)

Parámetros:

  • cur: el cursor que se utilizará para ejecutar la consulta.
  • sql: la consulta que se ejecutará. Debe estar presente un marcador de posición de un solo porcentaje, que será sustituido por una lista de VALORES.
  • argslist: una lista de series o diccionarios que contienen los argumentos de la consulta. La plantilla debe seguirse en términos de fuente y contenido.
  • plantilla: el fragmento que se fusionará en cada elemento de la lista de argumentos para formar la consulta
  • tamaño de página: la cantidad máxima de elementos de la lista de argumentos que puede tener cada instrucción.
  • fetch – es similar a fetchall. los valores pueden ser «Verdadero» o «Falso»

Ejemplo:

En este ejemplo, se usa el mismo archivo CSV en este método. el código comienza con la importación de paquetes, luego formamos una función personalizada execute_values, donde el marco de datos, la conexión y el nombre de la tabla se dan como argumentos. Las filas y los valores del marco de datos se actualizan en la tabla de PostgreSQL utilizando el método execute_values(). El método definido contiene un bloque de manejo de excepciones, si no hay excepción, se imprime «execute_values() done».

Python3

# import packages
import psycopg2
import psycopg2.extras as extras
import pandas as pd
  
  
def execute_values(conn, df, table):
  
    tuples = [tuple(x) for x in df.to_numpy()]
  
    cols = ','.join(list(df.columns))
  
    # SQL query to execute
    query = "INSERT INTO %s(%s) VALUES %%s" % (table, cols)
    cursor = conn.cursor()
    try:
        extras.execute_values(cursor, query, tuples)
        conn.commit()
    except (Exception, psycopg2.DatabaseError) as error:
        print("Error: %s" % error)
        conn.rollback()
        cursor.close()
        return 1
    print("execute_values() done")
    cursor.close()
  
  
# establishing connection
conn = psycopg2.connect(
    database="Airlines_Database",
    user='postgres',
    password='sherlockedisi',
    host='127.0.0.1',
    port='5432'
)
sql = '''CREATE TABLE airlines_final1(id int ,day
char(20) ,airline char(20),destination char(20));'''
  
# creating a cursor
cursor = conn.cursor()
cursor.execute(sql)
data = pd.read_csv("airlines_final.csv")
  
data = data[["id", "day", "airline", "destination"]]
  
# using the function defined
execute_values(conn, data, 'airlines_final1')

Producción:

execute_values() done

Publicación traducida automáticamente

Artículo escrito por sarahjane3102 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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