在 Python 版本 < 3.4(包括 Python 2.7)上,当您连接到尚不存在的 SQLite 数据库文件时,您无法阻止 SQLite 为您创建文件。
因此,在较旧的 Python 版本上,您必须首先使用不同的方法来测试文件是否存在。一个简单的os.path.exists就足够了:
import os.path
database = '/path/to/database.db'
if not os.path.exists(database):
raise ValueError('Invalid database path: %s' % (database,)
db = sqlalchemy.create_engine('sqlite:///' + database)
在较新的 Python 版本上,该sqlite3库支持SQLite URI 语法,因此您可以指定一个mode=rw参数来禁用默认rwc(读写创建)模式,前提是您uri=True在sqlite3.connect()调用时进行了设置。
SQLAlchemy 不支持 SQLite URI 参数(目前),但您可以使用该creator参数传入 URI 标志和您自己的连接字符串:
import sqlite3
uri = 'file:/path/to/database.db?mode=rw'
creator = lambda: sqlite3.connect(uri, uri=True)
db = sqlalchemy.create_engine('sqlite:////', creator=creator)