# Import pandas and sqlalchemy libraries
import pandas as pd
import sqlalchemy
# Create a database connection pool
pool = sqlalchemy.create_engine() # Fill with login/pg8000 connector
# Read data into dataframe from a csv file
df = pd.read_csv('data.csv')
# Alternatively, create a dataframe from a dictionary of data
# df = pd.Dataframe(data)
# Create an empty buffer to store the csv data
buffer = StringIO()
# Write the dataframe to the buffer without the index column
df.to_csv(buffer, index=False)
# Open a raw connection to the database
connPG8K = pool.raw_connection()
# Create a cursor object to execute queries
cursor = connPG8K.cursor()
# Reset the buffer position to the beginning
buffer.seek(0)
# Copy the data from the buffer to the database table using the csv format and header option.
# Table must exist. Will overwrite that table.
cursor.execute('COPY "OverwriteTable" FROM STDIN WITH (FORMAT csv, HEADER);', stream=buffer)
# Commit the changes to the database
connPG8K.commit()
3条答案
按热度按时间ibps3vxo1#
看看the source code,似乎没有直接导入CSV的方法,代码也没有任何内置的
INSERT
查询 Package 器,因此可以您可以选择手动使用CSV阅读器和使用
executemany
:字符串
需要注意的是,根据数据的大小,使用
islice
可能更好:型
nwsw7zdq2#
正如在另一个问题here中所建议的,您可以在对csv文件应用逻辑和使用csv read方法之前使用
next
方法。很抱歉没有插入作为对前一个答案的补充,但我没有足够的分数来这样做。
我遇到了同样的问题,我用下面的方法解决了这个问题。请注意,对我来说,执行many的正确方法是在
cursor
对象上,而不是在conn
上。字符串
nwwlzxa73#
所有这些方法对我来说都太慢了。在处理大数据时,COPY命令似乎工作得很好。这在几秒钟内运行,而其他方法则需要10分钟。
字符串