python – psycopg2.ProgrammingError:无法调整类型’DictRow’

我想在psycopg2中使用dict游标:

self.__db_conn = psycopg2.extras.DictConnection("host=... dbname=...")

这是我的查询:

cur.execute('INSERT INTO scm_main.tbl_ack(ack_summary_id, ack_local_timestamp, ack_user_id) '
    'SELECT summary_id AS ack_summary_id, now() AS ack_local_timestamp, us.user_id AS ack_user_id '
    'FROM scm_main.tbl_summary AS s '
    'INNER JOIN scm_main.vu_usr_stn AS us ON (s.summary_station_id = us.station_axis_id) '
    'WHERE ((s.summary_id > (SELECT COALESCE(max(a.ack_summary_id),0) FROM scm_main.tbl_ack AS a WHERE a.ack_user_id = %(user_id)s)) '
    'AND (s.summary_company_specific_id <> 0) '
    'AND (us.user_name = %(user_name)s) AND (s.summary_timestamp < (now() - \'00:25:00\'::interval))) '
    'ORDER BY s.summary_id ASC', { 'user_id': self.__user_id, 'user_name': self.__company })

但它给了我这个:

<class 'psycopg2.ProgrammingError'> exception: can't adapt type 'DictRow'

有人可以帮忙吗?

解决方法:

复杂类型,如DictRow(这是一个完整的结果行,可按列名索引)不能自动适应简单的SQL类型,而psycopg只是告诉你.您的代码看起来很好,所以错误几乎肯定是您想要将查询结果放在self .__ user_id和self .__ company属性中,但最终将整个结果集(即DictRow)放在其中一个或两个中.检查获取结果的代码.

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...