5

django でデータベースを分割しようとしていますが、最初のステップで奇妙なエラーが発生しました。

私は単純なdbルーターを作成しましたが、それは何もしません:

'''file /myproject/myapp/routers.py'''
class ShardingRouter(object):

    def db_for_read(self, model, **hints):
        return 'default'

    def db_for_write(self, model, **hints):
        return 'default'

    def allow_relation(self, obj1, obj2, **hints):
        return 'default'

    def allow_syncdb(self, db, model):
        return 'default'

私はsettings.pyに追加しました:

DATABASE_ROUTERS = ['myproject.myapp.routers.ShardingRouter',]

次のエラーが表示されます。

Traceback (most recent call last):
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__
    self.load_middleware()
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 45, in load_middleware
    mod = import_module(mw_module)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
    File "/hosting/myproject/myproject/middleware.py", line 10, in <module>
    from django.contrib.sites.models import Site
    File "/usr/local/lib/python2.7/dist-packages/django/contrib/sites/models.py", line 1, in <module>
    from django.db import models
    File "/usr/local/lib/python2.7/dist-packages/django/db/__init__.py", line 16, in <module>
    router = ConnectionRouter(settings.DATABASE_ROUTERS)
    File "/usr/local/lib/python2.7/dist-packages/django/db/utils.py", line 116, in __init__
    raise ImproperlyConfigured('Error importing database router %s: "%s"' % (klass_name, e))
ImproperlyConfigured: Error importing database router ShardingRouter: "cannot import name connection"

何の「つながり」?どういう意味ですか?見つからない、どこに問題がある((

4

3 に答える 3

6

にインポートする必要がありconnectionsますsettings.py

from django.db import connections

...
...

DATABASE_ROUTERS = ['myproject.myapp.routers.ShardingRouter',]
...
...
于 2012-07-30T02:48:20.957 に答える
0

この質問を見てください: Django multi-database routing

ところで、ドキュメントに記載されているように、データベース名ではなく、またはを返す必要がallow_relationあります。allow_syncdbTrueFalseNone

于 2012-07-31T21:54:16.113 に答える
0

私のアプリ名は、データベース alais user1 と同期されたブログです。

DATABASE_ROUTERS=['routers.BlogRouter']


DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.


        'NAME': 'mupltiple_datab_app1',                      # Or path to database file if using sqlite3.

        'USER': 'root',                      # Not used with sqlite3.

        'PASSWORD': 'admin',                  # Not used with sqlite3.

        'HOST': "",                      # Set to empty string for localhost. Not used with sqlite3.

        'PORT': "",                      # Set to empty string for default. Not used with sqlite3.
    },
    'user1':{
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

        'NAME': 'mupltiple_datab_app2',                      # Or path to database file if using sqlite3.

        'USER': 'root',                      # Not used with sqlite3.

        'PASSWORD': 'admin',                  # Not used with sqlite3.

        'HOST': "",                        # Set to empty string for localhost. Not used with sqlite3.

        'PORT': "",  


             }

    ,
    'user2':{
             'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.

        'NAME': 'mupltiple_datab_app3',                      # Or path to database file if using sqlite3.

        'USER': 'root',                      # Not used with sqlite3.

        'PASSWORD': 'admin',                  # Not used with sqlite3.

        'HOST':"" ,                      # Set to empty string for localhost. Not used with sqlite3.

        'PORT': "" ,  

             }
}

Django で複数のデータベースを操作するには、未踏のニュアンスが数多くあることは確かです。この機能の基礎となるコードを掘り下げていないことは認めますが、当分の間、すべてが必要に応じて機能するようです。本当に印象的だったのは、管理画面で両方のアプリがエラーなしで表示されたことです。

于 2013-01-31T07:54:01.473 に答える