我制作了一个python脚本,该脚本接受一个excel文件,并将其转换为一个csv文件。我的问题是我的csv中有多个需要为空的空值,但是当我尝试将其插入数据库时,出现此错误
psycopg2.DataError: invalid input syntax for type date: "None"
LINE 1: ...', 'Some info here', 'And some more', '1995-09-06', 'None'
这是我编写的将excel文件转换为CSV的代码
def excel_to_csv():
xlsx = pd.read_excel(excel_path + fileName + '.xlsx')
xlsx.to_csv(csv_file, encoding='utf-8', index=False, na_rep=None, quoting=csv.QUOTE_NONE)
excel_to_csv()
当我检查CSV文件时,所有内容均已正确格式化,其值由分隔,并且null值为None,不带引号。当我尝试读取CSV文件并将其插入数据库时,似乎开始出现问题。我为此使用csv.reader
with open(csv_file, 'rb') as f:
reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
next(reader)
for row in reader:
cur.execute(
"INSERT INTO databasetable (foo, foo2, foo3, foo4) VALUES (%s, %s, %s, %s);",
row
)
有人知道这是怎么回事吗?
答案 0 :(得分:1)
编辑:我看到CSV阅读器为您提供了字符串列表,因此我正在相应地编辑示例
Postgres无法识别"None"
(但是您的sql API显然可以识别None
。)您可以尝试将所有"None"
替换为None
。像这样:
for row in reader:
clean_row = []
for x in row:
if x == 'None':
clean_row.append(None)
else:
clean_row.append(x)
cur.execute(
"INSERT INTO databasetable (foo, foo2, foo3, foo4) VALUES (%s, %s, %s, %s);",
clean_row
)
答案 1 :(得分:0)
我的想法是,您需要将其设置为NULL
,而不是None
。参见:postgresql insert null value on query。