我在python中使用sqlite3。目前我正在使用以下代码
try:
con = sqlite3.connect(filename)
cur = con.cursor()
# run a fake query to test if the file selected is really a database
cur.execute("SELECT DISTINCT id FROM handle ORDER BY id DESC")
except:
eel.invalidFile()
else:
ExamineTable.printPhoneNum(con)
,它工作得很好。我正在运行一个假的查询来测试一个真实的数据库,因为我发现如果没有这一行,用户可以选择不是数据库的文件,并且当sqlite3试图连接时不会抛出异常。这可能是设计的,但我想知道是否有一种更正式的方式来检查而不运行虚拟查询?
PRAGMA integrity_check
或PRAGMA quick_check
可用于验证文件是否为有效的SQLite数据库。如果文件不是一个有效的SQLite数据库,或者它有文档中描述的任何问题,这将引发sqlite3.DatabaseError
。
con = sqlite3.connect(filename)
cur = con.cursor()
try:
cur.execute("PRAGMA integrity_check")
except sqlite3.DatabaseError:
eel.invalidFile()
con.close()
else:
ExamineTable.printPhoneNum(con)
参见:如何判断sqlite数据库文件是否有效?