为什么在使用PythonSQLite3模块时,ROWIDs在真空后不更新?
我正在开发一个使用python sqlite3模块的应用程序。我的数据库使用sqlite3提供的隐式ROWID列。我希望在删除一些行并清空数据库后,rowid会重新排序。因为在sqlite3官方文件中: VACUUM命令可能会更改任何 没有显式整数主键 我的pysqlite版本是为什么在使用PythonSQLite3模块时,ROWIDs在真空后不更新?,python,sqlite,pysqlite,Python,Sqlite,Pysqlite,我正在开发一个使用python sqlite3模块的应用程序。我的数据库使用sqlite3提供的隐式ROWID列。我希望在删除一些行并清空数据库后,rowid会重新排序。因为在sqlite3官方文件中: VACUUM命令可能会更改任何 没有显式整数主键 我的pysqlite版本是2.6.0,sqlite版本是3.5.9。有人能告诉我为什么它不起作用吗?使用真空吸尘器时需要注意什么 p.S.我安装了一个独立的sqlite,其版本为3.3.6。我在其中测试了真空语句,Rowid得到了更新。那么,罪魁
2.6.0
,sqlite版本是3.5.9
。有人能告诉我为什么它不起作用吗?使用真空吸尘器时需要注意什么
p.S.我安装了一个独立的sqlite,其版本为3.3.6
。我在其中测试了真空语句,Rowid得到了更新。那么,罪魁祸首可能是这个版本吗?或者可能是pysqlite的一个bug
提前感谢您的任何想法或建议 此行为取决于版本 如果您想要保证重新排序,您必须自己将所有记录复制到一个新表中。
(这适用于隐式和显式rowid。)它只说“可能会改变”。@JanneKarila感谢您的回复。那么,“may”是否意味着实际的实现会因版本而异?甚至对于同一版本,行为也是不可预测的?@JanneKarila我已经用最新的sqlite(3.7.17)对其进行了测试。rowid也不会更新。所以我认为我的第一个假设是有道理的。如果是这种情况,您知道是否有任何方法可以强制更新rowid,使它们始终保持连续性吗?谢谢。谢谢你的回复。那真的很有帮助!顺便说一句,重新排序的真空版本实际上是这样实现的吗?
VACUUM
创建一个新的数据库文件并复制所有数据。明白了。非常感谢,CL。