2012-12-19 34 views
4

我想使用psycopg2中提供的copy命令將舊數據庫中的錶行複製到新數據庫中。我想我可以通過StringIO重定向像下面使用psycopg2複製表copy_from和copy_expert?

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() 

,其中記錄顯示,我應該得到30000行。但是,儘管缺少錯誤消息,我仍沒有新的行。對於它的價值,檢查io.read()的長度顯示它爲零。

我該如何做這項工作?

回答

6

回答我的問題,有必要倒帶StringIO對象,使用

io.seek(0) 
+0

我只花了一個多小時,試圖找出爲什麼'copy_from'工作不爲它僅僅是這一點。他們確實需要在文檔中發出警告來做到這一點。 –

相關問題