我使用的是一个pgadmin客户端。我有多个csv文件。
我想将每个csv文件作为一个表导入。
当我尝试以下时
a( 点击创建表格
b( 输入表格名称并保存。
c( 我看到表名
d( 点击";导入csv">
e( 所选列为";标题";
f( 点击";导入";
但我收到了一条错误消息,如下
ERROR: extra data after last expected column
CONTEXT: COPY Test_table, line 2: "32,F,52,Single,WHITE,23/7/2180 12:35,25/7/2180..."
我还尝试了python psycopg2版本,如下所示
import psycopg2
conn = psycopg2.connect("host='xxx.xx.xx.x' port='5432' dbname='postgres' user='abc' password='xxx'")
cur = conn.cursor()
f = open(r'test.csv', 'r')
cur.copy_from(f,public.test, sep=',') #while I see 'test' table under my schema, how can I give here the schema name etc. I don't know wht it says table not defined
f.close()
UndefinedTable:关系"public测试";不存在
我可以检查是否可以使用pgadmin导入将一些随机csv导入为表吗?
熊猫很容易做到这一点。创建一个具有某种csv结构的表。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
csv首先通过read_csv读取到数据帧
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
问候Niels
根据我的理解,每个csv都需要一个新的表。下面的代码说明了这一点。它可以自定义,数据类型可以细化,请参阅Pandas的文档。DataFrame.to_sql.实际上,我认为繁重的工作是由SQLAlchemy 完成的
import io
import os
import pandas as pd
import psycopg2
buf_t1 = io.StringIO()
buf_t1.write("a,b,c,dn")
buf_t1.write("1,2,3,4n")
buf_t1.seek(0)
df_t1 = pd.read_csv(buf_t1)
df_t1.to_sql(name="t1", con="postgresql+psycopg2://host/db", index=False, if_exists='replace')
#
buf_t2 = io.StringIO()
buf_t2.write("x,y,z,tn")
buf_t2.write("1,2,3,'Hello World'n")
buf_t2.seek(0)
df_t2 = pd.read_csv(buf_t2)
df_t2.to_sql(name="t2", con="postgresql+psycopg2://host/db", index=False, if_exists='replace')
这将产生两个新的表,t1和t2。定义如下:
create table t1
(
a bigint,
b bigint,
c bigint,
d bigint
);
create table t2
(
x bigint,
y bigint,
z bigint,
t text
);