16

私の Django プロジェクトでは、既知のスキーマを持つさまざまなディレクトリに SQLite キャッシュ ファイルを生成するサード パーティ アプリケーションに依存しています。

Django モデルを使用してこれらのデータベースにアクセスしたいのですが、明らかに静的DATABASESセットアップは使用できません。

任意のパスで SQLite データベースを動的に開くにはどうすればよいですか?

編集

Byron Ruth が指摘したように、解決策は をQuerySet の関数django.db.connectionsと組み合わせて使用​​することです。using

4

3 に答える 3

33

これは、設定で定義されdjango.db.connectionsた単純なラッパーです。DATABASESラッパー クラスは次のとおりです: django.db.utils#L137-L227

from django.db import connections

# Add connection information dynamically..
connections.databases['new-alias'] = { ... }
# Ensure the remaining default connection information is defined.
# EDIT: this is actually performed for you in the wrapper class __getitem__
# method.. although it may be good to do it when being initially setup to
# prevent runtime errors later.
# connections.databases.ensure_defaults('new-alias')

# Use the new connection
conn = connections['new-alias']
于 2013-01-21T16:06:09.207 に答える
4

データベースはDATABASES設定で登録できます。

from your_project import settings
database_id = "unqique_name"
new_database = {}
new_database["id"] = database_id
new_database['ENGINE'] = 'django.db.backends.sqlite3'
new_database['NAME'] = '/project/data/db_%s.sql' % database_id
new_database['USER'] = ''
new_database['PASSWORD'] = ''
new_database['HOST'] = ''
new_database['PORT'] = ''
settings.DATABASES[database_id] = new_database

できますが、すべきではありません。

于 2013-01-10T09:24:58.110 に答える
1

使用される唯一のエンジンが SQLite であり、(唯一の) データベース ファイルの場所がさまざまであると仮定すると、次の呼び出し可能オブジェクトを提供しますNAME

def get_db_loc():
    # code to determine filesystem location of database
    return location

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': get_db_loc(),
        # More config goes here
    }
}
于 2013-01-20T01:05:11.173 に答える