1.Excel列和数据库表字段相同
def radical_to_db(): data1 = pd.read_excel("C:/work/20220714***/**/词**导入pg.xlsx") # drop first line data1 = data1.drop([0]) # set upd_date # get current time now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") data1["upd_date"] = now_time # trim data1["chinese_attr"] = data1["chinese_attr"].str.strip() data1["radical_full"] = data1["radical_full"].str.strip() data1["radical_abbr"] = data1["radical_abbr"].str.strip() data1["vers_no"] = data1["vers_no"].str.strip() data1["oper_indv"] = data1["oper_indv"].str.strip() # set operator data1["oper_indv"] = "admin" # dataframe类型转换为IO缓冲区中的str类型 output = StringIO() # sep : set split column data1.to_csv(output, sep='\t', index=False, header=False) output1 = output.getvalue() conn = psycopg2.connect(host="10.0.0.10", user = "postgres", password = "123456", database ="postgres" ) cur = conn.cursor() cur.copy_from(StringIO(output1), "tableName") conn.commit() cur.close() conn.close() print('done')
问题:
1.删除第一行标题
# drop first line df= df.drop([0])
2.KeyError: 'chinese_attr'
检查原Excel的表头是否包含,报错的列名
可以用 print(df.head()) 查看原表头
3.psycopg2.DataError: extra data after last expected column
原因:Excel文本中有空格,导致 to_csv 分列时候,分出了多余的列。
# sep 修改分隔符为其他生僻的字段中不可能出现的分隔符
data1.to_csv(output, sep='\t', index=False, header=False)
解决办法:
把文本列trim一下
# trim data1["chinese_attr"] = data1["chinese_attr"].str.strip() data1["radical_full"] = data1["radical_full"].str.strip() data1["radical_abbr"] = data1["radical_abbr"].str.strip() data1["vers_no"] = data1["vers_no"].str.strip() data1["oper_indv"] = data1["oper_indv"].str.strip()