4

我正在使用 sqlalchemy 连接到本地 sqlite 数据库。

这是我正在使用的代码 -

db = sqlalchemy.create_engine('sqlite:///Latencydb.db')
metadata = sqlalchemy.MetaData(db)

即使文件不存在,也不会引发异常。甚至db.connect()不抛出任何异常。

有没有办法检查数据库连接是否成功?(除了检查数据库中是否存在特定表?)

我在 Python 2.7.2 (Ubuntu) 上使用 sqlite 3.7.7 和 sqlalchemy 0.6.8

4

1 回答 1

10

在 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=Truesqlite3.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)
于 2012-08-01T19:48:37.697 回答