将一个随机csv导入为一个动态表-Postgresql和Python



我使用的是一个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
);

相关内容

最新更新