1

Django 1.4 (python 2.6) の DB ルーターに問題があります。ドキュメント (https://docs.djangoproject.com/en/dev/topics/db/multi-db/#automatic-database-routing) に従っていますが、サーバーを実行すると、次のエラー メッセージが表示されます。

django.core.exceptions.ImproperlyConfigured: Error importing database router MyDBRouter: "cannot import name connection"

私の設定.py

DATABASES = {
    'default': {
        ...
    },
    'other' : {
        ...
    }
}
DATABASE_ROUTERS = ['core.models.MyDBRouter',]

ここにdbルーターコード:

class MyAppRouter(object):
    def db_for_read(self, model, **hints):
        "Point all operations on myapp models to 'other'"
        if model._meta.app_label == 'myapp':
            return 'other'
        return None

    def db_for_write(self, model, **hints):
        "Point all operations on myapp models to 'other'"
        if model._meta.app_label == 'myapp':
            return 'other'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        "Allow any relation if a model in myapp is involved"
        if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp':
            return True
        return None

    def allow_syncdb(self, db, model):
        "Make sure the myapp app only appears on the 'other' db"
        if db == 'other':
            return model._meta.app_label == 'myapp'
        elif model._meta.app_label == 'myapp':
            return False
        return None

「デフォルト」で None を置き換えようとしましたが、それでも機能しません。

4

4 に答える 4

4

settings.py に「from django.db import connections」を追加して、この問題を解決しました。

151 # Database router                                                                                                                                       
152 from django.db import connections
153 DATABASE_ROUTERS         = ['core.models.MyDBRouter',]

これでサーバーは正常に動作します!しかし、ルーターはdjangoによって単に無視されます->それを修正するには、ルーターをモデルに保存しないでください! 新しいファイルを作成

于 2012-07-13T08:52:15.557 に答える
1

それは私には何の役にも立ちませんでした。私は自分のソリューションをhttps://stackoverflow.com/a/17888067/978912に投稿しました。おそらく、無限のインポート チェーンを介して誰かをデバッグする手間を省くことができます。:)

于 2013-07-26T18:06:33.123 に答える
1

Zakum彼のソリューションで言っているように、

上記の解決策がうまくいかない場合は、インポートを行ったかどうかを確認してください

from django.db.models import Model

あなたのルーティングファイルのいずれかで。もしそうなら、あなたはそれを取り除かなければなりません。

于 2013-11-05T15:35:29.697 に答える