8

dictカーソルを使用したいpsycopg2

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'

誰でも助けることができますか?

4

1 に答える 1

6

DictRow(つまり、完全な結果行で、列名でインデックス付けできる)のような複雑な型は、単純なSQL型に自動的に適合させることはできず、psycopgはそれを伝えているだけです。コードは問題ないように見えるので、ほぼ間違いなく、クエリの結果を属性self.__user_idself.__company属性に入れたいのに、結果セット全体、つまり、DictRowを一方または両方に入れてしまうというエラーが発生します。結果をフェッチするコードを確認してください。

于 2012-05-01T14:34:24.423 に答える