Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2013 22:34:43

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

Заполнить модель из модель.sql


Есть приложение agency. Создал папку sql по пути \agency\sql\
В которую поместил файл с именем той модели, которая должна быть заполнена, т.е.

socworker_sex.sql

сама модель:

class SocWorker_sex(models.Model):
    sex = models.TextField('Пол', max_length=7)
	
    def __unicode__(self):
        return self.sex

содержимое файла
INSERT INTO agency_socworker_sex (sex) VALUES (1,'Женский');
INSERT INTO agency_socworker_sex (sex) VALUES (2,'Мужской');

Выполняю ./manage.py syncdb - модели остаются незаполнеными.


Подскажите что может быть не так

Офлайн

#2 Май 25, 2013 00:16:41

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Заполнить модель из модель.sql

easthy
А вы воообще откуда взяли все это?
Читайте документацию на командуsyncdb. Собственно, там все описано.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Май 25, 2013 10:24:35

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

Заполнить модель из модель.sql

Позволю себе процитировать… Единственно это для django 1.2 у меня django 1.4.1

Providing initial SQL data¶
Django provides a hook for passing the database arbitrary SQL that’s executed just after the CREATE TABLE statements when you run syncdb. You can use this hook to populate default records, or you could also create SQL functions, views, triggers, etc.

The hook is simple: Django just looks for a file called sql/<modelname>.sql, in your app directory, where <modelname> is the model’s name in lowercase.

So, if you had a Person model in an app called myapp, you could add arbitrary SQL to the file sql/person.sql inside your myapp directory. Here’s an example of what the file might contain:

INSERT INTO myapp_person (first_name, last_name) VALUES ('John', 'Lennon');
INSERT INTO myapp_person (first_name, last_name) VALUES ('Paul', 'McCartney');
Each SQL file, if given, is expected to contain valid SQL statements which will insert the desired data (e.g., properly-formatted INSERT statements separated by semicolons).

https://docs.djangoproject.com/en/1.2/howto/initial-data/

Отредактировано easthy (Май 25, 2013 10:27:02)

Офлайн

#4 Май 25, 2013 19:58:27

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Заполнить модель из модель.sql

Определено одно поле, назначаются два.

Офлайн

#5 Май 26, 2013 13:30:30

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

Заполнить модель из модель.sql

Пробовал одно назначать - таблица пустая

Офлайн

#6 Май 26, 2013 14:06:25

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Заполнить модель из модель.sql

easthy
как указал Shamanб в модели у вас определено 1 поле, в sql файле подстановка 2 значений. ЧТо не является корректным. При попытке выполнения syncdb, Джанго выдаст ошибку:

Installing custom SQL …
Failed to install custom SQL for t16.SocWorker_sex model: 2 values for 1 columns
Installing indexes …
Installed 0 object(s) from 0 fixture(s)
Если правильно поправить sql файл:
INSERT INTO agency_socworker_sex (sex) VALUES ('Женский');
INSERT INTO agency_socworker_sex (sex) VALUES ('Мужской');
то все заработает. У меня Джанга 1.4.2



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Май 26, 2013 21:25:54

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

Заполнить модель из модель.sql

Пробовал заполнить таблицу с помощью dbshell и запрос:

INSERT INTO agency_socworker_sex (sex) VALUES ('Женский');
и не смог, т.к. требовался ещё один параметр (pk как я понял). Следующий же запрос
INSERT INTO agency_socworker_sex (sex) VALUES (1, 'Женский');
выполнялся без вопросов

вот модель agency_socworker_sex

class SocWorker_sex(models.Model):
    sex = models.TextField('Пол', max_length=7)
	
    def __unicode__(self):
        return self.sex

вот дамп через дбшелл где виден запрос
INSERT INTO agency_socworker_sex (sex) VALUES (1, 'Женский');



Так или иначе установка из папки sql и файла имя_модели.sql не выполнятеся… не пойму почему

Отредактировано easthy (Май 26, 2013 21:27:31)

Офлайн

#8 Май 27, 2013 05:42:54

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Заполнить модель из модель.sql

easthy
вот дамп через дбшелл где виден запрос
INSERT INTO agency_socworker_sex (sex) VALUES (1, 'Женский');
в шеле виден другой запрос :)
INSERT INTO agency_socworker_sex VALUES (1, 'Женский');
как видим в нем нет перечисления столбцов, вам правильно сказали - поправьте свой sql



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version