Взаимодействие с базой данных

Содержание

Вводная информация

Odoo работает совместно с СУБД PostgreSQL. На данном этапе мы не будем углубляться в технические тонкости. Я остановлюсь только на тех вещах, которые необходимы начинающему разработчику. В дальнейшем запущенный экземпляр сервера PostgreSQL я буду называть разными словами, например сервер БД, просто БД, Postgres или как-то еще.

Для того, чтобы наш экземпляр сервера odoo подключился к серверу БД нам нужно этому экземпляру как-то объяснить к какому серверу и порту подключаться, а так же с каким именем и паролем это делать. В случае с odoo вся эта информация должна быть отображена в файле конфигурации (шаблон которого находится в каталоге templates в каталоге менеджера управления проектами):

Параметры для работы с БД

Поскольку для разработки мы используем менеджер управления проектами, то он сделает все за нас. Запустит контейнер с БД, задаст все необходимые настройки для него и сгенерирует конфигурационный файл на его базе. Для того, чтобы узнать как, подключиться к БД внутри контейнера, можно посмотреть в docker-compose.yml файл, который создается в каталоге с нашим проектом. В нем будет описан сервис с именем db:

  db:
    image: postgres:13
    user: root
    tty: true
    ports:
      - 5432:5432
    environment:
      - POSTGRES_PASSWORD=odoo
      - POSTGRES_USER=odoo
      - POSTGRES_DB=postgres

Здесь мы можем видеть, что для подключения к БД напрямую, например удобным клиентом к различных базам данных DBeaver или плагином к вашей IDE. Мы будем использоват порт 5432, сервером у нас будет localhost или 127.0.0.1. А имя и пароль мы берем из переменных POSTGRES_PASSWORD и POSTGRES_USER. Подключаться к БД напрямую во время разработки частенько приходится и эта информация здесь именно для того, чтобы облегчить вам жизнь.

Создание новой БД

Поскольку, odoo сама может подключаться к БД как администратор, то она же может управлять не только данными в конкретной базе, но создавать новые базы, делать их копии, создавать архивы и удалять. Для этого в системе odoo есть менеджер баз данных. Если вы запустили сервер odoo в первый раз без указания ключа -d, то система предложит вам самостоятельно создавать БД заполнив соответствующую форму:

Создание новой БД

  1. Мастер-пароль - пароль от менеджера базы данных, его хеш хранится в файле конфигурации по ключу admin_passwd. Поскольку он не назначен, то на желтом фоне можно увидеть предложенный от системы пароль. Он потребуется если вы захотите сделать копию базы, удалить базу или загрузить новую. В общем все манипуляции с базами данных потребуют ввода пароля. Если он отсутствует в файле конфигурации, то при манипуляции с базами система его не будет спрашивать. При использовании менеджера разработки пароль не устанавливается и вы можете делать с базами все что захотите. Обратите внимание, что при создании новой базы система заставляет вас его использовать.
  2. Имя базы данных. Вы просто вводите имя
  3. Email - он же логин для учетной записи администратора. Вам не обязательно вводить реальный email, более того логин не обязан быть похож на электронный адрес. Даже сами создатели по умолчанию используют admin.
  4. Пароль для учетной записи администратора
  5. Номер телефона - не обязательное поле. Ни на что не влияет.
  6. Язык, можете выбрать тот, который вам удобнее, но для разработки я бы рекомендовал использовать английский
  7. Страна - ее выбор влияет на настройки бухгалтерского учета и другие параметры, например валюта. Поэтому лучше использовать ту страну, для которой вы создаете проект
  8. Нужно ли устанавливать демо данные. Если стоит галочка, то система при создании новой базы добавит демо данные. Клиентов, поставщиков, создаст документы продаж и закупок. Может быть удобно при изучении в качестве примера.

Использование менеджера БД

Если же у вас уже есть несколько баз данных, то система предложит вам выбрать ту, с которой вы будете работать:

Менеджер БД

  1. Обратите внимание на ссылку. Вы всегда можете перейти по ней чтобы попасть в менеджер баз данных odoo
  2. Предупреждение о том, что не установлен мастер-пароль (для разработки я его не использую т.к. больше мешает, чем помогает). Его можно назначить нажав на кнопку Set Master Password (6)
  3. Выбор базы данных, здесь вы можете ее удалить Delete, сделать копию Dublicate или же загрузить себе архив Backup. В этом случае браузер скачает файл, который содержит в себе полную копию вашй базы данных. И вы можете ее восстановить с помощью кнопку Restore Database
  4. Создание базы данных. Выше уже описано, как это делать.
  5. Восстановление базы данных их архива. См. п. 3
  6. Установка мастер-пароля. Смотри п. 1 из описания картинки про создание базы данных

Восстановление БД

При восстановлении базы данных вы увидите следующее:

Восстановление БД

  1. Введите мастер пароль
  2. Выберите файл с архивом
  3. Введите имя базы данных
  4. Выберите тип копирования, если вам не понятно о чем идет речь, выбирайте верхний вариант This database is a copy

Создание архива БД

При создании архива базы данных:

Создание архива БД

  1. Введите мастер пароль
  2. Выберите имя БД, для которой хотите сделать резервную копию
  3. Выберите тип архива. zip- включает в себя файловое хранилище, и может быть реально большим, pg_dump - выгрузит только архив самой базы данных без файлового хранилища, может быть полезно в различных случаях, например когда файловое хранилище очень большое и для разработки оно вам не нужно

При дублировании и удалении я думаю все достаточно очевидно)

Вход в БД

После того как выбрали базу данных, у нас появится следующее окошко для входа:

Вход в БД

  1. Можно выбрать другую базу данных
  2. Логин, который мы задавали при создании базы данных
  3. Пароль, который мы задавали при создании базы данных
  4. Перейти в менеджер управления базами данных

Выход из БД

Чтобы выйти из базы данных нужно нажать следующую кнопку:

Выход из БД

  1. Нажмите в правом верхнем углу на имя пользователя
  2. В появившемся меню нажмите Выйти или Logout

Автоматизация действий с БД

При использовании менеджера разработки есть возможно автоматизировать рутинные действия:

  • Если вы испольуете ключ -d и указываете имя базы данных, то система проверит существует ли база с таким именем, и если есть, запустит систему в режиме работы с одной базой. Если базы данных не существует, то она будет создана.
  • При автоматическом создании базы данных вы может заранее задать параметры в файле конфигурации для создания базы данных. Смотрите ключ db_creation_data в документации и файле конфигурации
  • Вы так же можете автоматически удалить базу данных с указанным именем с помощью параметров командной строки. Читайте документацию
  • Можно так же делать архив базы данных и восстанавливать базу данных из предоставленного вам архива, для этого достаточно положить его в каталог, который указан в .env файле по ключу BACKUP_DIR. При создании архива вашей базы данных, новый архив появится в этом же каталоге. Имя архива обычно выглядит как имя_базы_дата_время.

Примеры:

Запустить в режиме монобазы или создать новую с именем db-name-16 и установить модули в файле конфигуркции по ключу init_modules и обновить модули указанные в файле конфигурации по ключу update_modules

python3 /path/to/your/project/docker_start.py -d db-name-16 -i -u

Удалить базу данных, создать сразу с таким же именем, установить модули в файле конфигурации по ключу init_modules и обновить модули указанные в файле конфигурации по ключу update_modules

python3 /path/to/your/project/docker_start.py -d db-name-16 -i -u --db-drop db-name-16

Восстановить архив с именем db_name_16_2023_12_12_12_12_12, присвоить имя базе данных db-name-16 и установить модули в файле конфигуркции по ключу init_modules и обновить модули укзанные в файле конфигурации по ключу update_modules. Архив с таким именему будет искаться в каталогe, который указан в .env файле по ключу BACKUP_DIR

python3 /path/to/your/project/docker_start.py -d db-name-16 -i -u --db-restore db_name_16_2023_12_12_12_12_12

Задания для самостоятельного выполнения:

  1. Запустите систему без ключа -d. Создайте базу данных из менеджера БД. Укажите в качестве имени базы my_new_database-16, в качестве логина администратора new_admin, и паролем new_password
  2. Войдите в эту базу
  3. Выйдите из нее
  4. Создайте резервную копию - zip архив
  5. Удалите базу my_new_database-16
  6. Восстановите из резервной копии базу с именем my_new_database_2-16
  7. Войдите в нее
  8. Выйдите из нее
  9. Удалите все базы данных
  10. Создайте базу данных с использованием менеджера разработки
  11. Войдите в нее
  12. Удалите ее с использованием менеджера разработки

Обсуждение

Обсудить, указать на ошибки и опечатки можно здесь