如何将熊猫数据框插入到现有的 PostgreSQL 表中?
原文:https://www.geesforgeks.org/如何插入熊猫-dataframe 到现有的 postgresql-table/
在本文中,我们将看到如何向现有的 PostgreSQL 表中插入 pandas DataFrame。
需要的模块
- pandas : Pandas DataFrame 是一个二维可变大小的、潜在异构的表格数据结构,带有标记轴(行和列)。数据框是一种二维数据结构,即数据以表格形式排列成行和列。熊猫数据框架由三个主要部分组成,即数据、行和列。
- psycopg2 : PostgreSQL 是一个功能强大的开源对象关系数据库系统。PostgreSQL 运行在所有主要的操作系统上。PostgreSQL 遵循 DataBase 系统的 ACID 属性,支持触发器、可更新视图和物化视图、外键。
- sqlalchemy : SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供了 SQL 的全部功能和灵活性
我们通过导入包并创建格式为:的连接字符串来启动代码
postgres://user:password @ host/database '
create_engine()函数以连接字符串为参数,形成与 PostgreSQL 数据库的连接,连接后我们创建一个字典,并使用 pandas 方法进一步将其转换为数据帧。DataFrame() 方法。
to_sql() 方法用于将熊猫数据框插入 Postgresql 表中。最后,我们使用 execute()方法执行命令来执行我们的 SQL 命令,并使用 fetchall() 方法来获取记录。
df.to_sql('data ',con=conn,if_exists='replace ',index=False)
参数有:
- 表的名称
- 关系
- if_exists:如果表已经存在,我们要应用的函数。例如:“append”帮助我们添加数据,而不是替换数据。
- 索引:真或假
例 1:
使用 sqlalchemy 将 pandas DataFrame 插入现有的 PostgreSQL 表。在以下示例中,用于在 PostgreSQL 数据库中创建表的 create table 命令是:
创建表数据(名称变量、年龄变量);
代码:
蟒蛇 3
import psycopg2
import pandas as pd
from sqlalchemy import create_engine
conn_string = 'postgres://user:password@host/data1'
db = create_engine(conn_string)
conn = db.connect()
# our dataframe
data = {'Name': ['Tom', 'dick', 'harry'],
'Age': [22, 21, 24]}
# Create DataFrame
df = pd.DataFrame(data)
df.to_sql('data', con=conn, if_exists='replace',
index=False)
conn = psycopg2.connect(conn_string
)
conn.autocommit = True
cursor = conn.cursor()
sql1 = '''select * from data;'''
cursor.execute(sql1)
for i in cursor.fetchall():
print(i)
# conn.commit()
conn.close()
输出:
('Tom', 22)
('dick', 21)
('harry', 24)
PostgreSQL 中的输出:
PostgreSQL 中的输出表
例 2:
在不使用 sqlalchemy 的情况下,将 pandas DataFrame 插入现有的 PostgreSQL 表。像往常一样,我们使用 connect()命令与 PostgreSQL 建立连接,并执行 execute_values()方法,在那里执行“插入”SQL 命令。包含了一个 try-except 子句,以确保错误被捕获(如果有的话)。
要查看或下载下面程序中使用的 CSV 文件:点击这里的。
在以下示例中,用于在 PostgreSQL 数据库中创建表的 create table 命令是:
创建表化石燃料 _c02(年份 int、国家/地区 varchar、总量 int、固体燃料 int、液体燃料 int、气体燃料 int、水泥 int、气体燃烧 int、percapita int、bunker fuels int);
代码:
蟒蛇 3
import psycopg2
import numpy as np
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("the dataframe is inserted")
cursor.close()
conn = psycopg2.connect(
database="ENVIRONMENT_DATABASE", user='postgres', password='pass', host='127.0.0.1', port='5432'
)
df = pd.read_csv('fossilfuels.csv')
execute_values(conn, df, 'fossil_fuels_c02')
输出:
the dataframe is inserted
插入数据帧后