django settings.py и справка по нескольким базам данных - PullRequest
0 голосов
/ 04 августа 2011

Я использую django1.3, хотел поместить свои данные в 1000 баз данных, например app_idmod_0 ~ ap_idmod_999. Теперь я изменил свои настройки.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'myapp',                      # Or path to database file if using sqlite3.
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.

    },    
}
myapp = DATABASES['default']
DB_MOD = 1000
for i in xrange(0, DB_MOD):
    myapp.__setitem__('NAME', 'myapp_idmod_' + str(i))
    DATABASES.__setitem__('myapp_idmod_' + str(i), myapp)

Это не работает. Я имею в виду, когда я использую manage.py syncdb --database=myapp_idmod_0, таблицы не создаются. Почему? Как я могу заставить это работать?

1 Ответ

0 голосов
/ 04 августа 2011

Для начала я не могу представить , какое возможное использование вы могли бы использовать для 1000 баз данных. Если вы не Facebook, в чем я сомневаюсь.

Во-вторых, вы устанавливаете каждый экземпляр в один и тот же словарь, поэтому при изменении имени на следующей итерации также изменяется и предыдущее имя. Вам необходимо скопировать словарь перед его изменением.

Наконец, что все это за хрень с __setitem__? Почему бы просто не установить значение словаря обычным способом?

for i in xrange(DB_MOD):
    db_dict = myapp.copy()
    db_dict['NAME'] = 'myapp_idmod_' % i
    DATABASES['myapp_idmod_%s' % i] = db_dict
...