psycopg2 从csv导入SQL插入的"NULL"值

1 投票
1 回答
3237 浏览
提问于 2025-04-18 11:30

我正在尝试使用psycopg2从csv文件上传一些数据。我知道COPY和copy_from命令,但在我的情况下,我需要使用插入语句,无论如何。我的问题是,csv文件中的某一列是整数值,但它可能包含“NULL”。当游标尝试执行插入时,Postgres会返回错误:整数的输入语法无效:“NULL”。psycopg2的文档说应该用None来表示数据库中的空值,但在我的情况下,似乎我必须检查所有字段的值是否等于“NULL”,如果是的话,就传递None。这看起来不是正确的方法。有没有办法将“NULL”读取为None,或者在不进行任何检查的情况下将“NULL”传递给psycopg2。

with open('/my.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        pg_cursor.execute(
            """ insert into "MyTable"("IntField")
                values(%s)""", row
        )
    conn.commit()

1 个回答

2

你可以用一种叫做列表推导式的方法,把 'NULL' 替换成 None

row = [None if cell == 'NULL' else cell for cell in row]
pg_cursor.execute(
    """ insert into "MyTable"("IntField")
        values(%s)""", row
)

撰写回答