首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果db文件不存在,如何使sqlite3.connect()失败?

如果db文件不存在,如何使sqlite3.connect()失败?
EN

Stack Overflow用户
提问于 2019-09-06 20:36:21
回答 1查看 3.7K关注 0票数 8

如果db文件不存在,sqlite3.connect()将创建它。我希望它失败。是否有办法这样做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-06 20:53:35

第一种方法是使用os.path.isfile检查文件路径:

代码语言:javascript
运行
复制
import sqlite3
import os

my_path = 'database.db' # or 'absolute_path/to/the/file'
if os.path.isfile(my_path):
    sqlite3.connect(my_path)

否则,可以使用uri=True参数指定打开的mode,并在文件丢失时引发错误。如果没有mode,则将创建该文件(如果不存在),因此您可以使用例如rwro来避免新文件:

  • 以读和写模式打开: 连接(文件:database.db?mode=rw‘,uri=True)
  • 若要以只读模式打开: 连接(文件:database.db?mode=ro‘,uri=True)

如果文件不存在,这将引发以下错误:

sqlite3.OperationalError:无法打开数据库文件

您可以在文档的以下几章中找到更多关于这些模式的信息:

https://www.sqlite.org/uri.html

https://www.sqlite.org/c3ref/open.html#urifilenamesinsqlite3open

要打开具有特殊字符的文件(对于URI来说是特殊的),另一种方法是使用以下方法:

代码语言:javascript
运行
复制
import pathlib

my_db = pathlib.Path('path/to/data?ba=se.db').as_uri()
sqlite3.connect('{}?mode=rw'.format(my_db), uri=True)

# or sqlite3.connect(f'{my_db}?mode=rw', uri=True)  with f-string
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57828286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档