Найти - Пользователи
Полная версия: Заполнить модель из модель.sql
Начало » Базы данных » Заполнить модель из модель.sql
1
easthy

Есть приложение 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 - модели остаются незаполнеными.


Подскажите что может быть не так
JOHN_16
easthy
А вы воообще откуда взяли все это?
Читайте документацию на командуsyncdb. Собственно, там все описано.
easthy
Позволю себе процитировать… Единственно это для 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/
Shaman
Определено одно поле, назначаются два.
easthy
Пробовал одно назначать - таблица пустая
JOHN_16
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
easthy
Пробовал заполнить таблицу с помощью 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 не выполнятеся… не пойму почему
PooH
easthy
вот дамп через дбшелл где виден запрос
INSERT INTO agency_socworker_sex (sex) VALUES (1, 'Женский');
в шеле виден другой запрос :)
INSERT INTO agency_socworker_sex VALUES (1, 'Женский');
как видим в нем нет перечисления столбцов, вам правильно сказали - поправьте свой sql
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB