如何使用python和postgres将表的奇数行插入另一个表中

时间:2017-09-08 21:17:23

标签: python python-2.7 postgresql

我有一个python程序,我想从一个表中读取奇数行并将它们插入到另一个表中。我怎样才能做到这一点?

例如,第一个表总共有5行,我想将第一行,第三行和第五行插入另一个表中。

请注意,该表可能包含数百万行,因此性能非常重要。

2 个答案:

答案 0 :(得分:1)

我找到了一些方法here。这里有两个转录为psycopg2

如果您有顺序主键,则只需使用mod

database_cursor.execute('SELECT * FROM table WHERE mod(primary_key_column, 2) = 1')

否则,您可以使用子查询来获取行号并使用mod

database_cursor.execute('''SELECT col1, col2, col3
                             FROM (SELECT row_number() OVER () as rnum, col1, col2, col3
                                     FROM table)
                           WHERE mod(rnum, 2) = 1''')

答案 1 :(得分:0)

如果你有一个id-type列,保证在每次插入时增加1(有点像自动增量索引),你总是可以修改它来选择行。但是,当您开始从正在选择的表中删除行时,这会中断。

更复杂的解决方案是使用postgresql的row_number()函数。以下假设您有一个id列,可用于按所需顺序对行进行排序:

select r.* 
from (select *,row_number() over(order by id) as row 
      from <tablename>
) r
where r.row % 2 = 0

注意:无论你如何操作,性能都不会真正高效,因为你必须进行全表扫描,并且使用全表扫描选择具有数百万条记录的表上的所有列将是慢。