【问题标题】:Checking sqlite connection error in sqlalchemy在 sqlalchemy 中检查 sqlite 连接错误
【发布时间】:2019-09-29 05:49:49
【问题描述】:

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

【问题讨论】:

  • 你有没有想过如果sqlite db文件不存在,它可能会创建它?这将在某种程度上解释没有例外。
  • 是的,我就是这么想的。我正在寻找“仅开放”模式的开关或参数,但我找不到。

标签: python sqlite sqlalchemy


【解决方案1】:

在 Python 版本

因此,在较旧的 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=Truesqlite3.connect() 通话中。

SQLAlchemy 不支持 SQLite URI 参数(目前),但您可以使用 creator parameter 传入 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)

【讨论】:

  • 好的..这真的是一个原型代码..我最终需要使用一个mysql数据库..但是如果这是它适用于SQLite的唯一方法,我想它必须这样做..
  • 如果您的参数是 SQLAlchemy 数据库 URL 或 SQLite 内存数据库怎么办?我们必须解析参数以检查文件是否存在似乎不对...我正在寻找一些 SQLAlchemy 选项来 not create 如果文件不存在.
  • @jjmontes:我已经更新了答案以展示如何使用 SQLite3 ?mode=rw 参数来做到这一点。
  • 这很棒。对于我的用例,如果 SQLAlchemy 利用这一点并引入一些明确的方法来避免为数据库驱动程序创建文件,这将是很好的(在我的用例中,它可以是任何数据库系统,所以我仍然需要首先检查驱动程序是否是sqlite)。另外,很高兴得到大师的回答:向你致敬,谢谢!
猜你喜欢
  • 2018-01-14
  • 2014-11-04
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 2014-07-08
  • 2017-10-23
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多