我正在尝试使用 psycopg2 将数据从 csv 文件加载到 postgres 数据库中
这是表架构:
Column | Type | Collation | Nullable | Default
---------------------+------------------------+-----------+----------+---------
implementation_type | character varying(25) | | not null |
file_type | character varying(7) | | not null |
loop | character varying(10) | | |
segment_name | character varying(10) | | |
segment_desc | character varying(255) | | |
element_name | character varying(255) | | |
element_no | character varying(10) | | |
data_type | character varying(5) | | |
requirment | character(1) | | |
repeat | character varying(3) | | |
min | integer | | |
max | integer | | |
possible_values | character varying(255) | | |
Error : Error: invalid input syntax for type integer: ""
LINE 16: ...', 'REFERENCE IDENTIFIER', 'REF04', '', 'O', '1', '', '', ''...
它会引发 min 列错误
注:
这是插入数据的Python代码。
for row in data:
sql = """
INSERT INTO segment_data (
IMPLEMENTATION_TYPE,
FILE_TYPE,
Loop,
Segment_Name,
Segment_Desc,
Element_Name,
Element_No,
Data_Type,
Requirment,
Repeat,
Min,
Max,
Possible_Values
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
"""
cursor.execute(sql, tuple(row))
connection.commit()
您正在尝试将空字符串 '' 插入到整数类型的列中,尤其是“min”列,它在表架构中声明为整数。这就是您遇到问题的原因。对于整数列,PostgreSQL 将空字符串视为无效输入,因为它不会自动将其转换为 NULL 值。
在将数据添加到数据库之前,您应该将 Python 代码中的空字符串更改为 NULL 值以解决此问题。为此,可以使用条件语句。以下是如何更改代码来处理这种情况:
for row in data:
# Convert empty strings to None for integer columns
for i in range(len(row)):
if row[i] == '':
row[i] = None
sql = """
INSERT INTO segment_data (
IMPLEMENTATION_TYPE,
FILE_TYPE,
Loop,
Segment_Name,
Segment_Desc,
Element_Name,
Element_No,
Data_Type,
Requirment,
Repeat,
Min,
Max,
Possible_Values
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
"""
cursor.execute(sql, tuple(row))
connection.commit()
希望它有效:)