Python 3.x 将随机csv动态导入为表-Postgresql和Python

Python 3.x 将随机csv动态导入为表-Postgresql和Python,python-3.x,postgresql,psycopg2,pgadmin,pgadmin-4,Python 3.x,Postgresql,Psycopg2,Pgadmin,Pgadmin 4,我使用的是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/

我使用的是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()
不可定义:关系“public.test”不存在


我可以检查是否可以使用pgadmin import将一些随机csv导入为表吗?

熊猫将很容易做到这一点。创建一个具有某种csv结构的表

csv首先由read_csv读取到数据帧

问候尼尔斯

据我所知,每个csv都需要一个新表。下面的代码说明了这一点。它可以定制,数据类型可以细化,请参阅Pandas.DataFrame.to_sql的文档。我认为,实际上,这项繁重的工作是由

这将产生两个新表,t1和t2。定义如下:

create table t1
(
    a bigint,
    b bigint,
    c bigint,
    d bigint
);
create table t2
(
    x bigint,
    y bigint,
    z bigint,
    t text
);

test”没有定义
是因为它应该是
cur.copy_from(f,'test',sep=',')
名称错误来自Python而不是Postgres,因为Python正在寻找
test
的变量。最后一个预期列之后出现的
额外数据
,是因为该行没有正确引用,并且存在导致从传入数据创建额外列的原因。您需要显示完整的数据行以及表模式,以获得更好的答案。但是我已经创建了一个空表(
test
),在
public
模式下没有列。我没有向其中添加列,因为我希望能够动态创建表。当我将csv数据导入/读取到postgresql db中时,我希望表中有来自csv的这些头,这是不会发生的,
COPY
需要有一个表,该表至少具有与输入数据相同的列数(且类型正确)。该表可以有比输入数据更多的列,但是您必须向
COPY
提供列列表。您需要通过两个步骤来完成此操作,即读取标题并创建一个表(使用一些脚本),然后将
复制到表中。您好,谢谢。向上投票。Postgresql表也可以这样做吗?但它要求我创建一个包含列的表。我只有一个表(没有列名)。我希望csv中的列被用作TABLE的标题,但这不会再次发生,这将需要整个序列的
alterTable。。。添加列
语句。假设您可以识别列名,让我们进一步了解@AdriankAver。那么要创建ALTER语句,您需要确定数据类型吗?它是否可以为空?是否仅限于某些值?是否与其他表中的列相关?是否必须是唯一的。。。我想每一列都可以定义为:文本(无限制)、可空和无关系。结果-没有数据或关系完整性。当用户输入不属于的列时会发生什么?这将是一场无性能的维护噩梦。简言之,对你来说最糟糕的事情是成功。
create table t1
(
    a bigint,
    b bigint,
    c bigint,
    d bigint
);
create table t2
(
    x bigint,
    y bigint,
    z bigint,
    t text
);