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