4

psycopg2 で利用可能なコピーコマンドを使用して、テーブルの行を古いデータベースから新しいデータベースにコピーしたいと考えています。次のようにStringIOを介してリダイレクトできると思いました

io = StringIO.StringIO('')
whereClause = " SELECT %s FROM %s WHERE home_city='%s' "%(
                 ','.join(columns), tablename, city,
                     )
old_db_cursor.execute(whereClause)
rows = old_db_cursor.fetchall()
logger.info('Should get %d rows',len([r for r in rows]))
sql = 'COPY (%s) to STDOUT'%(whereClause,)
old_db_cursor.copy_expert( sql, io,  )
new_db_cursor.copy_from( io, tablename, columns=columns)
new_db_connection.commit()

ログには、30,000 行を取得する必要があることが示されています。しかし、エラー メッセージがないにもかかわらず、新しい行を取得できません。価値があるのは、長さをチェックすると、io.read()それがゼロであることを示しています。

どうすればこれを機能させることができますか?

4

1 に答える 1

6

私自身の質問に答えると、StringIO オブジェクトを巻き戻す必要があります。

io.seek(0)
于 2012-12-19T18:43:33.787 に答える