gpt4 book ai didi

postgresql - COPY with FORCE NULL 到所有字段

转载 作者:行者123 更新时间:2023-12-05 05:37:43 24 4
gpt4 key购买 nike

我有几个具有不同字段名称的 CSV,我正在将它们从 s3 数据源复制到 Postgres 数据库中。其中有很多包含空字符串,"" 我想在导入时将其转换为 NULL。当我尝试复制时,我得到了类似这样的错误(其他数据类型、整数等也有同样的问题):

psycopg2.errors.InvalidDatetimeFormat: invalid input syntax for type date: ""

我已经尝试使用 FORCE_NULL (field 1, field2, field3) - 这对我有用,除了我想做 FORCE_NULL (*) 并申请所有的列,因为我有很多我要引入的字段,我希望将其应用到这些字段中。

这个可用吗?

这是我的 csv 示例:"ABC","tgif","123","","XyZ"

最佳答案

使用 psycopg2 Copy职能。在这种情况下 copy_expert :

cat empty_str.csv 
1, ,3,07/22/2
2,test,4,
3,dog,,07/23/2022

create table empty_str_test(id integer, str_fld varchar, int_fld integer, date_fld date);

import psycopg2

con = psycopg2.connect("dbname=test user=postgres host=localhost port=5432")
cur = con.cursor()

with open("empty_str.csv") as csv_file:
cur.copy_expert("COPY empty_str_test FROM STDIN WITH csv", csv_file)
con.commit()

select * from empty_str_test ;

id | str_fld | int_fld | date_fld
----+---------+---------+------------
1 | | 3 | 2022-07-22
2 | test | 4 |
3 | dog | | 2022-07-23

从这里COPY :

NULL

Specifies the string that represents a null value. The default is \N (backslash-N) in text format, and an unquoted empty string in CSV format. You might prefer an empty string even in text format for cases where you don't want to distinguish nulls from empty strings. This option is not allowed when using binary format.

copy_expert 允许您指定 CSV 格式。如果您使用 copy_from,它将使用文本格式。

关于postgresql - COPY with FORCE NULL 到所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73074229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com