Python 2.7 如何从Sqlite表中选择行,排除以前查询中的行?

Python 2.7 如何从Sqlite表中选择行,排除以前查询中的行?,python-2.7,sqlite,Python 2.7,Sqlite,我有一个Sqlite表,它有超过2500万行。我使用以下代码从该表中随机选择了100万行: # using sqlite3 code c = cursor.execute("SELECT * FROM reviews_table WHERE ROWID IN (SELECT ROWID FROM reviews_table ORDER BY RANDOM() LIMIT 1000000) ") 现在,我希望从表中再选择100万行,不包括上一个查询中的行。我该怎么做呢?我在这里看到的第一个问题

我有一个Sqlite表,它有超过2500万行。我使用以下代码从该表中随机选择了100万行:

# using sqlite3 code
c = cursor.execute("SELECT * 
FROM reviews_table WHERE ROWID IN (SELECT ROWID FROM reviews_table ORDER BY RANDOM() LIMIT 1000000) ")

现在,我希望从表中再选择100万行,不包括上一个查询中的行。我该怎么做呢?

我在这里看到的第一个问题是,自从上次查询以来,可能已经插入了新数据。你打算如何跟踪此事?您不可能一次获取所有数据吗?创建一个按随机键排序的新表,然后使用偏移量是否出于任何原因都不实用?例如:创建按随机顺序按select*from reviews\U表格顺序排序的表格-然后使用…-若你们有一个PK,你们可以将它子集为create table keys,作为select PK from reviews\u table order(随机选择PK从reviews\u表格顺序),然后以每100万的偏移量连接回reviews\u表格block@TimBiegeleisen:对不起,我忘了提到数据库是静态的。我只是用它来读取数据,所以插入不是问题。@JonClements:谢谢,它能工作!我最初犹豫是否尝试这样做,因为我认为随机排序所有行将花费大量时间排序1000000行花费了将近35秒,因此我认为我在看运行时的分钟数。但它在不到一分钟的时间内就完成了!但是,我是SQL的初学者,希望您能回答一些关于我的代码的问题:首先,为了创建新表,我最初尝试的是:创建表randtable作为select rowid from reviews\u table order by random。然而,这引发了一个语法错误。删除select子查询周围的括号修复了该问题。你能告诉我为什么第一次查询不起作用吗?我在这里看到的第一个问题是,自从上次查询以来,可能插入了新数据。你打算如何跟踪此事?您不可能一次获取所有数据吗?创建一个按随机键排序的新表,然后使用偏移量是否出于任何原因都不实用?例如:创建按随机顺序按select*from reviews\U表格顺序排序的表格-然后使用…-若你们有一个PK,你们可以将它子集为create table keys,作为select PK from reviews\u table order(随机选择PK从reviews\u表格顺序),然后以每100万的偏移量连接回reviews\u表格block@TimBiegeleisen:对不起,我忘了提到数据库是静态的。我只是用它来读取数据,所以插入不是问题。@JonClements:谢谢,它能工作!我最初犹豫是否尝试这样做,因为我认为随机排序所有行将花费大量时间排序1000000行花费了将近35秒,因此我认为我在看运行时的分钟数。但它在不到一分钟的时间内就完成了!但是,我是SQL的初学者,希望您能回答一些关于我的代码的问题:首先,为了创建新表,我最初尝试的是:创建表randtable作为select rowid from reviews\u table order by random。然而,这引发了一个语法错误。删除select子查询周围的括号修复了该问题。你能告诉我为什么第一个查询不起作用吗?