psycopg2,插入没有时区的时间戳

时间:2012-11-04 19:14:26

标签: python postgresql

我在使用psycopg2将数据插入postgresql中的表时遇到问题。

该脚本执行以下操作:

  1. 查询postgres数据库中的数据
  2. 使用numpy进行一些数学计算
  3. 然后我想将日期重新插入数据库中的另一个表。以下是插入数据的代码:

    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(),)])
    
  4. 该脚本会引发以下错误:

    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”和我想要插入的数据属于同一类型。有什么问题?????

    谢谢!

1 个答案:

答案 0 :(得分:1)

tolist()上没有m_date的情况下试用。

如果没有看到water_level_elev表的表格架构或tolist方法的来源,那么完全无法回答这个问题。但是,听起来PostgreSQL期望measure_date值是一个时间戳,但正在获得时间戳的列表。这就是为什么PostgreSQL在错误消息中第二种类型的末尾有[]的原因。这似乎是因为您粘贴的代码在tolist变量中的任何内容上调用名为m_date的方法,该方法很可能将单个时间戳转换为时间戳列表,其中包含{{1}中的时间戳}}。