我在使用psycopg2将数据插入postgresql中的表时遇到问题。
该脚本执行以下操作:
然后我想将日期重新插入数据库中的另一个表。以下是插入数据的代码:
cur.executemany("INSERT INTO water_level_elev (hole_name,measure_date,water_level_elev,rid) VALUES (%s,%s,%s,%s);",[(hole.tolist(),m_date.tolist(),wl.tolist(),rid.tolist(),)])
该脚本会引发以下错误:
psycopg2.ProgrammingError: column "measure_date" is of type timestamp without time zone but expression is of type timestamp without time zone[]
LINE 1: INSERT INTO water_level_elev (hole_name,measure_date,water_l...
^
HINT: You will need to rewrite or cast the expression.
我很困惑......列“measure_date”和我想要插入的数据属于同一类型。有什么问题?????
谢谢!
答案 0 :(得分:1)
在tolist()
上没有m_date
的情况下试用。
如果没有看到water_level_elev
表的表格架构或tolist
方法的来源,那么完全无法回答这个问题。但是,听起来PostgreSQL期望measure_date
值是一个时间戳,但正在获得时间戳的列表。这就是为什么PostgreSQL在错误消息中第二种类型的末尾有[]
的原因。这似乎是因为您粘贴的代码在tolist
变量中的任何内容上调用名为m_date
的方法,该方法很可能将单个时间戳转换为时间戳列表,其中包含{{1}中的时间戳}}。