Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 14, 2013 15:37:33

easthy
Зарегистрирован: 2013-05-24
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Подключение второй базы данных

Необходимо подключить вторую базу данных, содержающую примерно 30 000 строк. Подскажите как это можно сделать.

Отредактировал файл setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '/var/www/working/db.sqlite3',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # 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.
    },
    'okato': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/var/www/testing/okato.sqlite3',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}
Но команда
./manage.py dbshell
.databases
выводит
0 main /var/www/working/db.sqlite3

Что делаю не так?

Как после настройки подключения базы данных сделать из неё выборку? Сначала ведь надо создать модель? Пробовал
./manage.py inspectdb > inspected_models.py
Процесс обрывается на середине, даже при одной подключенной базе… в чем причина не знаю.
Видимо необходимо написать вручную модель. Подскажите как для следующего кода

CREATE TABLE `class_okato` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,
`name` VARCHAR(512)  NOT NULL ,
`code` VARCHAR(11)  NOT NULL ,
`control_number` SMALLINT  NOT NULL ,
`parent_id` INT  NULL DEFAULT NULL,
`parent_code` VARCHAR(11)  NULL DEFAULT NULL,
`node_count` SMALLINT  NOT NULL DEFAULT 0,
`additional_info` VARCHAR(128)  NULL DEFAULT NULL,
CONSTRAINT `class_okato_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES class_okato (`id`));

Ведь надо не просто ещё модель описать, но указать, что она относится к другой базе данных. Как?

Как после использовать базу вроде ясно:
>>> # This will run on the 'other' database.
>>> Author.objects.using('okato').all()

Офлайн

#2 Июнь 14, 2013 15:46:07

easthy
Зарегистрирован: 2013-05-24
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Подключение второй базы данных

Один вопрос похоже снят

./manage.py inspectdb --database=okato > inspected_models.py

вывела модель:

from django.db import models
class ClassOkato(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=512)
    code = models.CharField(max_length=11)
    control_number = models.SmallIntegerField()
    parent_id = models.IntegerField(null=True, blank=True)
    parent_code = models.CharField(max_length=11, blank=True)
    node_count = models.SmallIntegerField()
    additional_info = models.CharField(max_length=128, blank=True)
    class Meta:
        db_table = u'class_okato'

непонятно однако подключена ли база, почему dbshell показывает, что подключена лишь одна база

Офлайн

#3 Июнь 14, 2013 15:48:20

easthy
Зарегистрирован: 2013-05-24
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Подключение второй базы данных

Хотя не полностью вопрос снят. Куда делся ForeignKey в модели?

CONSTRAINT `class_okato_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES class_okato (`id`));

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version