我有一个python程序,我想从一个表中读取奇数行并将它们插入到另一个表中。我怎样才能做到这一点?
例如,第一个表总共有5行,我想将第一行,第三行和第五行插入另一个表中。
请注意,该表可能包含数百万行,因此性能非常重要。
答案 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
注意:无论你如何操作,性能都不会真正高效,因为你必须进行全表扫描,并且使用全表扫描选择具有数百万条记录的表上的所有列将是慢。