2011-05-29 34 views
0

什么是最可靠的方法,以确定哪些语句是“查询”与“改变”?例如,SELECTUPDATE/INSERT/CREATE确定非修改修改语句SQLite中

解析声明我自己似乎是明显的第一次尝试,但我不禁想到这将是一个片状的解决方案。刚开始寻找SELECT的时候并不起作用,因为PRAGMA也可以返回结果,而且我确信有很多方法可以使策略失败。测试从游标返回的零行也不起作用,因为SELECT显然可以返回零结果。

我通过Python的sqlite3的模块SQLite的工作。

+0

如果您只需声明一个语句*不能*修改数据,则将其包装在一个事务中并在最后回滚。 – SingleNegationElimination 2011-05-29 15:48:17

回答

1

使用sqlite3_changes API调用,使用changes功能,也可以从SQL。

随着TokenMacGuy提到,您可以回滚包含导致更改的语句的事务; sqlite3_changes函数会让你知道是否有必要。

如果您需要有关受影响的表和行的更多细粒度信息,还有update_hook回调。