2012-04-30 24 views
3

私はpsycopg2でdictのカーソルを使用したい:psycopg2.ProgrammingError:タイプを適応させることができない 'DictRow'

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' 

誰でもお手伝いできますか?

+1

この場合、 'self .__ user_id'と' self .__ company'の型と値を表示できますか?最も可能性が高いのは 'DictRow'です。 –

答えて

1

DictRow(完全な結果行で、列名で索引付け可能)のような複合型は、自動的に単純なSQL型に適合することはできず、psycopgはそれを伝えるだけです。あなたのコードはうまくいくように見えるので、ほとんどの場合、エラーの結果をクエリの結果をとself.__companyの属性に入れたいが、全体の結果セット、つまりDictRowを1つまたは両方に入れることになった。結果を取得するコードを確認します。

関連する問題