即时导入随机 csv 作为 table - Postgresql 和 Python

Import a random csv as a table on the fly - Postgresql and Python

我正在使用 pgadmin 客户端。我有多个 csv 文件。

我想将每个 csv 文件导入为 table。

当我尝试下面的方法时

a) 点击创建 table

b) 输入 table 的名称并保存。

c) 我看到 table 名字

d) 点击“导入 csv”

e) 选择的列为“header”

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: relation "public.test" does not exist

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

Pandas 可以轻松做到这一点。创建一个 table 结构为一些 csv.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

csv 首先由 read_csv 读取到 Dataframe

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

问候尼尔斯

据我了解要求,每个 csv 都需要一个新的 table。下面的代码说明了这一点。可以自定义,可以细化数据类型,参见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,d\n")
buf_t1.write("1,2,3,4\n")
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,t\n")
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')

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

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