当从Python连接到SQLite数据库(使用Python 2.6)时,有哪些策略可以确保程序打开一个有效的数据库文件(这里有效的意思是“匹配程序所期望的”)?
我想确保在进行一些开放检查后,我可以(合理地)确定程序已经打开了一个可以按预期工作的数据库文件 – 理想情况下,如果文件是新的/空的则创建所有内容并停止/警告文件是一个其他东西的数据库,或以其他方式破坏.
我猜诀窍是将打开的文件架构与程序中的预期架构进行比较?
如果是这样,你会怎么做?
否则,还应该做些什么?
解决方法:
在我想要类似的东西的解决方案中,我倾向于将.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 EXISTS和CREATE INDEX IF NOT NOT EXISTS.
原文地址:https://codeday.me/bug/20190530/1187060.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。