【发布时间】:2017-09-27 16:11:39
【问题描述】:
我正在尝试使用pysqlsimplecipher 加密 SQLite3 数据库。当我尝试加密它时,它给出了一个错误:
raise RuntimeError('needs reserved space at the end of each page.')
RuntimeError: needs reserved space at the end of each page.
我不知道该怎么做。我正在使用用于 sqlite 的数据库浏览器。是否有任何我应该执行的 SQL 语句,我应该在 DB 浏览器中更改的任何设置或其 SQLite 模块中的任何 python 函数以在每个页面的末尾保留空间?多少空间就足够了?
或任何解决方法?它是较大程序的一部分,所以这里的限制是我应该使用 python 来加密。但是,我可以使用任何方法来保留空间,因为它只需要完成一次。
我的平台是 windows 8.1,python 版本是 3.6 x32。如果这很重要。
我问的是一种 pythonic 方式或一个 SQL 语句来做到这一点。 我已经找到了answer using c++,但那是在 C++ 中的。我对c++了解不多 我读过你必须编译 sqlite 才能与 c++ 一起使用。我不知道。如果有人发布整个代码 sn-p 以使用 c++ 来完成,我将不胜感激。
【问题讨论】:
-
不,答案是关于 c/c++ :sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N) 我问的是 SQL 或 pythonic 方式。
-
sqlite3_test_control函数只能用于 空 数据库。无论如何,您可以使用ctypes模块从 python 调用它。 -
谢谢你。请澄清“空”;我应该删除元组或整个表(创建新数据库)?
-
“空”是指一个新数据库。您将需要使用
ctypes来创建新数据库,因此您可以获得指向它的指针,该指针可以传递给sqlite3_test_control函数(即sqlite3 *db参数)。在此之后,您可以使用任何您喜欢的方法将所有数据从旧数据库传输到新数据库。如果你用谷歌搜索“ctypes sqlite3”,你应该会找到很多示例代码来帮助你入门(例如this SO question)。
标签: python python-3.x sqlite