0

更具体地说,如果我使用模拟生成器的 python db api 迭代数据库,一次给我一行,生成器是否还会返回我同时创建的新行?

我的猜测是肯定的,因为我认为这样的生成器的实现将涉及一个游标,只要请求新行,它就会简单地转到下一行。

4

2 回答 2

1

不。

一旦您进行了 sql 查询并开始检索结果,您就不能确定新行是否会在结果集中。

结果可能在内存中,也可能在数据库的缓冲区中。

你可以做类似的事情;

while ( result = "SELECT .... where processed=0 LIMIT 1" )
{
   do processing
   Run Sql "UPDATE row set processed=1 where id = result[id]"
}
于 2013-08-07T18:46:25.950 回答
1

生成器是否还会返回我在此期间创建的新行?

如果您的意思是:“我在迭代时由其他连接创建的行”,答案是“否”。


简单地说,当执行 SELECT 查询时,您会看到数据库的“快照”。从该快照中看不到对数据库的并发更改。

事实上,如果您使用事务表(即:InnoDB),并且根据您的事务隔离级别,其他连接所做的更改可能在您打开新事务之前不可见(请记住,在auto_commit模式下,新事务是应每个请求为您打开)。

于 2013-08-07T18:43:54.910 回答