4

sqlalchemyを使用してローカルのsqliteデータベースに接続しています。

これは私が使用しているコードです-

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

ファイルが存在しない場合でも、例外は発生しません。例外もdb.connect()スローしません。

データベース接続が成功したかどうかを確認する方法はありますか?(データベース内の特定のテーブルの存在を確認する以外に?)

Python 2.7.2(Ubuntu)でsqlite3.7.7とsqlalchemy0.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 に答える