检查sqlalchemy中的sqlite连接错误

vin*_*eet 3 python sqlite sqlalchemy

我使用sqlalchemy连接到本地sqlite数据库.

这是我正在使用的代码 -

db = sqlalchemy.create_engine('sqlite:///Latencydb.db')
metadata = sqlalchemy.MetaData(db)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mar*_*ers 9

在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)
Run Code Online (Sandbox Code Playgroud)

在较新的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)
Run Code Online (Sandbox Code Playgroud)