Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在使用PythonSQLite3模块时,ROWIDs在真空后不更新?_Python_Sqlite_Pysqlite - Fatal编程技术网

为什么在使用PythonSQLite3模块时,ROWIDs在真空后不更新?

为什么在使用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得到了更新。那么,罪魁

我正在开发一个使用python sqlite3模块的应用程序。我的数据库使用sqlite3提供的隐式ROWID列。我希望在删除一些行并清空数据库后,rowid会重新排序。因为在sqlite3官方文件中:

VACUUM命令可能会更改任何 没有显式整数主键

我的pysqlite版本是
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。