我正在尝试在django上对我的数据库进行分片,但是我在第一步时遇到了奇怪的错误。
我制作了一个简单的数据库路由器,没有任何东西:
'''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"
什么'连接'?这是什么意思? 找不到,问题出在哪里((
答案 0 :(得分:6)
您需要在connections
中导入settings.py
:
from django.db import connections
...
...
DATABASE_ROUTERS = ['myproject.myapp.routers.ShardingRouter',]
...
...
答案 1 :(得分:0)
你应该看看这个问题: Django multi-database routing
BTW,如the documentation中所述,allow_relation
和allow_syncdb
应返回True
,False
或None
,不< / strong>数据库名称。
答案 2 :(得分: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中使用多个数据库有一些未经探索的细微差别,我承认我还没有深入研究这个功能的底层代码,但是暂时一切似乎都按照要求工作。真正令人印象深刻的部分是在管理员中看到这两个应用没有错误。