Как организовать базу данных в Django с несколькими, отличными приложениями?

Я плохо знаком с Django (и базы данных в целом), и я не уверен, как структурировать следующее. Источники данных, которые я буду иметь для своего сайта:

  1. блог
  2. для нескольких различных игр:
    • высокий список счета
    • созданные пользователями уровни

Если бы я хранил данные в обычных файлах, то у меня просто был бы один файл для каждого вышеупомянутого. В Django идеально (я думаю) у меня была бы отдельная база данных для каждого из них, но по-видимому несколько поддержка БД еще не там для Django. Я волнуюсь (излишне?) о хранении всего в одной базе данных по двум причинам:

  1. Если я завинчиваю что-то в одном из разделов, я не хочу портить остальную часть данных.

  2. Когда я работаю над одним из этих разделов, я хотел бы свободу легко менять модель. Так как я изучил это syncdb на самом деле, не синхронизирует базу данных, я решил, что самая легкая вещь сделать, когда бездельничание с моделью должно просто вытереть базу данных и запуститься. Снова, я волнуюсь по поводу того, чтобы портить другие разделы. Я посмотрел на юг, и это походит на большую проблему, чем это стоит во время перспективного проектирования приложения (но я пересмотрю позже, когда будут на самом деле ценные данные).

Часть проблемы - то, что я не действительно удобное хранение моих данных в двоичном формате. Я используюсь для отправки текстовых сообщений, таким образом, я могу легко различный это, изменять его в редакторе, и т.д., не проходя некоторый волшебный интерфейс БД (я использую postgresql, между прочим).

Действительно ли мои страхи необоснованны? Как люди обычно решают эту проблему?

5
задан Jesse Beder 21 December 2009 в 20:26
поделиться

4 ответа

Как бы то ни было, я полностью понимаю ваше разочарование, когда я проходил через действительно похожий мыслительный процесс, когда начинал. К сожалению, вы мало что можете сделать (по крайней мере, легко), кроме как познакомиться с инструментами, которые вы будете использовать.

Во-первых, вам не нужно несколько баз данных для того, что вы делаете - один сделает. Каждое приложение будет создавать в БД свои собственные таблицы, которые несколько изолированы друг от друга. Как уже упоминалось, вы можете сделать python manage.py сброс имени app_name, чтобы сбросить только одну из них в случае, если вы смените модель. Однако вы потеряете эти данные.

Чтобы получить данные в относительно простом для работы формате, можно воспользоваться командой python manage.py dumpdata > file_name.json, а затем перезагрузить его позже python manage.py loaddata file_name.json. Вы можете использовать его для резервного копирования, локальных тестовых данных или в качестве миграции бедняков (подсказка: Юг был бы проще).

Еще один вариант - использовать базу данных NoSQL для любых данных, которые, по вашему мнению, потребуют дополнительной гибкости. Просто имейте в виду, что на данный момент Django не поддерживает ни одну из них. Это означает отсутствие поддержки администратора или ModelForms. Конечно, наличие модели может стать ненужным

.
9
ответ дан 18 December 2019 в 09:07
поделиться

Короче говоря, ваши опасения безосновательны. Вы должны «организовать» свою базу данных по проектам, чтобы использовать термин Django. Каждая модель в каждом приложении будет иметь свою таблицу, но все они будут в одной базе данных. Помещение их в отдельную базу данных - не лучшая идея по целому ряду причин, самая главная из которых заключается в том, что вы не можете выполнять запросы по базам данных.

Хотя я согласен с тем, что юг, вероятно, немного тяжел для ваших начальных этапов проектирования / разработки, его следует серьезно рассмотреть для всего, даже похожего на бета-версию и абсолютно необходимого в производстве.

Если вы собираетесь много возиться со своими моделями во время разработки, лучше всего использовать фикстуры для быстрой загрузки данных после запуска синхронизации. Или, если вы собираетесь изменить несколько обязательных полей, затем напишите быстрый Python, чтобы создать для вас фиктивные данные.

Что касается того, что вы не доверяете свои данные двоичным файлам, простой "pg_dump" даст вам текстовую версию ваших данных. Мне кажется, что вы работаете над своим приложением с данными реального времени, что является ошибкой. Ваша цель должна заключаться в том, чтобы ваше приложение было построено, работало и протестировано на поддельных данных или, по крайней мере, на копии ваших производственных данных, а затем, когда вы уверены, что все в порядке, перенесите его в производство. Вот где пригодятся такие вещи, как юг, поскольку вы можете автоматизировать это развертывание, и это поможет вам обработать любые изменения таблиц / столбцов базы данных, которые вам нужно внести.

Я уверен, что все это звучит неприятно, но все это можно автоматизировать, и, поверьте мне, это значительно облегчит вашу жизнь в будущем.

Что касается того, что вы не доверяете свои данные двоичным файлам, простой "pg_dump" даст вам текстовую версию ваших данных. Мне кажется, что вы работаете над своим приложением с данными реального времени, что является ошибкой. Ваша цель должна заключаться в том, чтобы ваше приложение было построено, работало и протестировано на поддельных данных или, по крайней мере, на копии ваших производственных данных, а затем, когда вы уверены, что все в порядке, перенесите его в производство. Здесь пригодятся такие вещи, как юг, поскольку вы можете автоматизировать это развертывание, и это поможет вам обработать любые изменения таблиц / столбцов базы данных, которые вам нужно внести.

Я уверен, что все это звучит как неприятность, но все это можно автоматизировать, и поверьте мне, это значительно облегчит вашу жизнь в будущем.

Что касается того, что вы не доверяете свои данные двоичным файлам, простой "pg_dump" даст вам текстовую версию ваших данных. Мне кажется, что вы работаете над своим приложением с данными реального времени, что является ошибкой. Ваша цель должна заключаться в том, чтобы ваше приложение было построено, работало и протестировано на поддельных данных или, по крайней мере, на копии ваших производственных данных, а затем, когда вы уверены, что все в порядке, перенесите его в производство. Здесь пригодятся такие вещи, как юг, поскольку вы можете автоматизировать это развертывание, и это поможет вам обработать любые изменения таблиц / столбцов базы данных, которые вам нужно внести.

Я уверен, что все это звучит неприятно, но все это можно автоматизировать, и, поверьте мне, это значительно облегчит вашу жизнь в будущем.

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

Я уверен, что все это звучит как неприятность, но все это можно автоматизировать, и поверьте мне, это значительно облегчит вашу жизнь в будущем.

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

Я уверен, что все это звучит неприятно, но все это можно автоматизировать, и, поверьте мне, это значительно облегчит вашу жизнь в будущем.

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

Я уверен, что все это звучит как неприятность, но все это можно автоматизировать, и поверьте мне, это значительно облегчит вашу жизнь в будущем.

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

Я уверен, что все это звучит неприятно, но все это можно автоматизировать, и, поверьте мне, это значительно облегчит вашу жизнь в будущем.

4
ответ дан 18 December 2019 в 09:07
поделиться

Обычно я просто сбрасываю модуль

>>> python manage.py reset blog

, это сбрасывает все таблицы в INSTALLED_APPS.blog

Я не уверен, что это ответит на ваш вопрос, но это гораздо менее разрушительно, чем очистка БД.

4
ответ дан 18 December 2019 в 09:07
поделиться

Syncdb действительно следует использовать только для разработки. Вот почему на самом деле не имеет значения, если вы очистите таблицы и начнете снова, возможно, экспортируете данные поиска в файл json, который вы сможете импортировать при каждой синхронизации.

Однако когда ваш сайт перейдет в рабочую среду, у вас будет немного больше Работа. Любые изменения, которые вы вносите в свои модели, которые должны быть отражены в базе данных, должны быть отправлены как SQL и запущены вручную в базе данных. Существует функция django-admin.py для выдачи предложенного SQL, который вы можете использовать для создания сценария для запуска в базе данных для его миграции. Как вы уже упоминали, приложение для миграции, такое как South, может быть здесь полезным, но это не является строго необходимым.

Что касается разделения сайтов, запускайте их как отдельные сайты / проекты. У вас может быть отдельный файл настроек для каждого проекта, который позволяет запускать две разные базы данных. Это контрастирует с запуском двух сайтов как отдельных приложений в одном проекте. Если они полностью разделены, они, вероятно, не должны быть в одном проекте, если вам не нужно использовать общий код.

1
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: