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