检查数据库文件是否有效以及程序所需的内容?

2024-04-23 14:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

当从Python(使用python2.6)连接到SQLite数据库时,有什么策略可以确保程序打开了一个有效的数据库文件(这里的valid意味着“与程序期望的相匹配”)?在

我想确保在一些打开检查之后,我可以(合理地)确定程序已经打开了一个数据库文件,它将按预期工作-理想情况下CREATE如果文件是新的/空的,则停止/警告,如果该文件是其他文件的数据库,或以其他方式损坏。在

我猜窍门是将打开的文件的模式与程序中预期的模式进行比较?
如果是这样,你会怎么做?
否则,还该怎么办?在


Tags: 文件程序数据库警告sqlitecreate方式模式
2条回答

在需要类似内容的解决方案中,我倾向于将.sql文件保存在与代码相同的目录中,其中包含数据库的构建说明,使用类似于以下内容的结构:

# setup
PRAGMA foreign_keys=ON;
PRAGMA journal_mode=TRUNCATE;
PRAGMA locking_mode=EXCLUSIVE;
PRAGMA synchronous=NORMAL;

# Locations
CREATE TABLE IF NOT EXISTS Locations (
    locID INTEGER PRIMARY KEY,
    locPath TEXT NOT NULL
);
# blah-blah
CREATE UNIQUE INDEX IF NOT EXISTS fldPath_idx
ON Folders(fldPath);
# and so on

请注意,所有SQL语句都以分号结尾,作为行的最后一个非空白字符,因为我有类似以下方法的代码,确保每次应用程序启动时架构都会运行:

^{pr2}$

注意CREATE TABLE IF NOT EXISTSCREATE INDEX IF NOT EXISTS的用法。在

SQLite有一个pragma user_version,它将为您在数据库中存储任意数字。通常情况下,您将使用它来跟踪您自己的架构版本-例如应用程序的第一个版本是1,当您以后更改架构三个应用程序版本时,您将其设置为2,以检测您的代码是否已完成架构升级。在

但是,您可以将其设置为任何起始值。例如从3656672354开始,添加到内部版本跟踪。任何其他数据库的值在该范围内的可能性几乎为零。在

相关问题 更多 >