检查sqlalchemy中的sqlite连接错误

时间:2012-08-01 19:20:45

标签: python sqlite sqlalchemy

我正在使用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

1 个答案:

答案 0 :(得分:8)

在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 syntax,因此您可以指定mode=rw参数来禁用默认rwc(读写创建)模式,前提是您在uri=True来电时设置sqlite3.connect()

SQLAlchemy(尚未)支持SQLite URI参数,但您可以使用creator parameter传递URI标志和您自己的连接字符串:

import sqlite3

uri = '/path/to/database.db?mode=rw'

creator = lambda: sqlite3.connect(uri, uri=True)

db = sqlalchemy.create_engine('sqlite:////', creator=creator)