Оценок пока нет Построение проекта Django с БД Postgre SQL и импорт данных из SQLite

Допустим, есть у нас такая ситуация, что проект на Django установлен а использованием локальной БД SQLite и нам необходимо это все экспортировать в реляционную БД на примере PostgreSQL.

Реляционные системы управления базами данных являются ключевым компонентом многих веб-сайтов и приложений. Они обеспечивают структурированный способ хранения, организации и доступа к информации.

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

Установка и настройка PostgreSQL на Ubuntu

Репозитории Ubuntu по умолчанию содержат пакеты Postgres, поэтому их можно установить с помощью apt-системы. Перед этим обновим свой локальный индекс пакета. Затем установим пакет Postgres вместе с пакетом -contrib, который добавит некоторые дополнительные утилиты и функции

sudo apt-get update
sudo apt-get install libpq-dev postgresql postgresql-contrib

Запускаем PostgreeSQL

sudo su - postgres

Командная строка терминала теперь будет начинаться с postgres@yourserver.

Теперь заходим в режим команд SQL и интерфейса PostgreSQL

postgres@yourserver# psql

После команды выше командная строка теперь будет начинаться с postgres=#.

Создаем базу данных для проекта, обратите внимание, что в режиме SQL запрос должен оканчиваться «;»

postgres=# CREATE DATABASE projectdb;

 

Создаем пользователя для БД проекта

postgres=# CREATE USER dbuser WITH PASSWORD 'userpass';

Мы устанавливаем кодировку по умолчанию для UTF-8, которую ожидает Django. Мы также устанавливаем схему изоляции транзакций по умолчанию «read commit», которая блокирует чтение из незафиксированных транзакций. Наконец, мы устанавливаем часовой пояс. По умолчанию наши проекты Django будут настроены на использование UTC

postgres=# ALTER ROLE dbuser SET client_encoding TO 'utf8';
postgres=# ALTER ROLE dbuser SET default_transaction_isolation TO 'read committed';
postgres=# ALTER ROLE dbuser SET timezone TO 'UTC';

 

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

postgres=# GRANT ALL PRIVILEGES ON DATABASE projectdb TO dbuser;

 

Выходим из режима ввода SQL, чтобы вернуться к сеансу оболочки postgres

\q

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

exit

Настройка проекта Django на использование

PostgreSQL

Теперь, когда наша база данных настроена, мы можем установить Django. Для большей гибкости мы установим Django и все его зависимости в виртуальной среде Python

Создание и настройка виртуальной среды

Создаем виртуальную среду для хранения зависимостей Python проекта Django, набрав команду

virtualenv myprojectenv

Это установит локальную копию Python и pip[pip3] в каталог myprojectenv

Прежде, чем создать проект Django нужно сначала активировать виртуальную среду, которую мы создали шагом выше

source myprojectenv/bin/activate

После этой команды строка запроса будет похожа на (myprojectenv)user@host.

В окружении проекта устанавливаем пакеты Django и psycopg2, который является бэкэндом для PostgreSQL

(myprojectenv)user@host: /myprojectenv# pip[pip3] install django psycopg2

 

Замечение. Тут еще один момент, связанный с psycopg2. Начиная с версии 2.8 данный пакет будет переименован в psycopg2-binary и поэтому нужно дополнительно установить данный пакет с этим названием

(myprojectenv)user@host: /myprojectenv# pip[pip3] install django psycopg2-binary

В противном случае, может возникнуть предупреждение такого рода

/home/websofter/lib/python3.6/site-packages/psycopg2/__init__.py:144: 
UserWarning: The psycopg2 wheel package will be renamed from release 2.8; 
in order to keep installing from binary please use "pip install psycopg2-binary" instead. 
For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.

Дополнительно про это можно узнать по ссылке.

Создание и настройка проекта Django

Теперь мы можем запустить проект Django в нашей директории myprojectenv. Это создаст дочерний каталог с именем проекта myproject , в котором будет еще одна папка с тем же названием для хранения самого кода и создаст сценарий управления в текущем каталоге. Не забудьте добавить точку в конце команды, чтобы она была правильно настроена

(myprojectenv)user@host: /myprojectenv# pip[pip3] django-admin.py startproject myproject .

 

Теперь нам надо отредактировать файл настроек myproject/myproject/settings.py проекта на то, чтобы проект, вместо базы SQLite, который стоит по умолчанию начал работать с базой Postgre, который мы выше настроили и для этого открываем этот файл настроек и ищем там строки

. . .
ALLOWED_HOSTS = []
. . .
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
. . .

и заменяем это все на

. . .
ALLOWED_HOSTS = ['server-domain_or_IP']
. . .
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'projectdb',
        'USER': 'dbuser',
        'PASSWORD': 'userpass',
        'HOST': 'localhost',
        'PORT': '',
    }
}
. . .

Сохраняем и закрываем этот файл.

Миграция баз данных на использование Postgre и запуск проекта

Теперь, когда настройки Django настроены, мы можем перенести наши структуры данных в нашу базу данных и протестировать серве��.

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py makemigrations
(myprojectenv)user@host: /myprojectenv/myproject# python manage.py migrate

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

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py createsuperuser

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

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py runserver 0.0.0.0:8001

На этом интеграция и запуск закончена. Остается любоваться результатом через адрес сервера и порт 8001, на котором запущен наш проект Django с БД Postgree

http://server_domain_or_IP:8000

 

Импорт данных из SQLite в PostgreSQL

в проекте Django

Окей. Выше мы рассмотрели, как интегрировать проект Django с Postgre, но что если в SQLite есть уже данные, которые нужно перенести в Postgre SQL?

Выгружаем существующие данные из SQLite, причем, в настройках settings.py нужно настроить на использование SQLite

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py dumpdata > datadump.json

Изменяем settings.py на использование Postgres backend. Выше мы это уже рассматривали как делать.

Убедитесь, что вы можете подключиться к PostgreSQL. Затем

(myprojectenv)user@host: /myprojectenv/myproject# python manage.py migrate --run-syncdb<br>

 

Использованные источники:

  1. How To Use PostgreSQL with your Django Application on Ubuntu 14.04
  2. How to migrate Django from SQLite to PostgreSQL

Пожалуйста, оцените материал

WebSofter

Web - технологии