gpt4 book ai didi

python - 检查数据库文件是否有效以及程序期望什么?

转载 作者:太空狗 更新时间:2023-10-30 02:34:47 25 4
gpt4 key购买 nike

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

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

我猜技巧是将打开的文件的架构与程序中的预期架构进行比较?
如果是这样,你会怎么做?
不然怎么办?

最佳答案

在我需要类似内容的解决方案中,我倾向于将 .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 语句都以分号作为一行的最后一个非空白字符结尾,因为我有类似于以下方法的代码,可确保每次我的应用程序启动时模式都运行:

def db_schema(self):
cur= self._db.cursor()
with io.open(self.SQLPATH, "r") as fp:
sql_statement= ""
for line in fp:
line= line.rstrip()
if line.startswith('#'): continue
sql_statement+= line
if line.endswith(";"):
try:
cur.execute(sql_statement)
except sql.OperationalError:
print("Failed:\n%s" % sql_statement)
sql_statement= ""
# file is done
cur.close()

请注意 CREATE TABLE IF NOT EXISTSCREATE INDEX IF NOT EXISTS 的使用。

关于python - 检查数据库文件是否有效以及程序期望什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6304495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com