Как подключить postgresql к django windows

от admin

Databases¶

Django attempts to support as many features as possible on all database backends. However, not all database backends are alike, and we’ve had to make design decisions on which features to support and which assumptions we can make safely.

This file describes some of the features that might be relevant to Django usage. It is not intended as a replacement for server-specific documentation or reference manuals.

General notes¶

Persistent connections¶

Persistent connections avoid the overhead of reestablishing a connection to the database in each request. They’re controlled by the CONN_MAX_AGE parameter which defines the maximum lifetime of a connection. It can be set independently for each database.

The default value is 0 , preserving the historical behavior of closing the database connection at the end of each request. To enable persistent connections, set CONN_MAX_AGE to a positive integer of seconds. For unlimited persistent connections, set it to None .

Connection management¶

Django opens a connection to the database when it first makes a database query. It keeps this connection open and reuses it in subsequent requests. Django closes the connection once it exceeds the maximum age defined by CONN_MAX_AGE or when it isn’t usable any longer.

In detail, Django automatically opens a connection to the database whenever it needs one and doesn’t have one already — either because this is the first connection, or because the previous connection was closed.

At the beginning of each request, Django closes the connection if it has reached its maximum age. If your database terminates idle connections after some time, you should set CONN_MAX_AGE to a lower value, so that Django doesn’t attempt to use a connection that has been terminated by the database server. (This problem may only affect very low traffic sites.)

At the end of each request, Django closes the connection if it has reached its maximum age or if it is in an unrecoverable error state. If any database errors have occurred while processing the requests, Django checks whether the connection still works, and closes it if it doesn’t. Thus, database errors affect at most one request per each application’s worker thread; if the connection becomes unusable, the next request gets a fresh connection.

Setting CONN_HEALTH_CHECKS to True can be used to improve the robustness of connection reuse and prevent errors when a connection has been closed by the database server which is now ready to accept and serve new connections, e.g. after database server restart. The health check is performed only once per request and only if the database is being accessed during the handling of the request.

The CONN_HEALTH_CHECKS setting was added.

Caveats¶

Since each thread maintains its own connection, your database must support at least as many simultaneous connections as you have worker threads.

Sometimes a database won’t be accessed by the majority of your views, for example because it’s the database of an external system, or thanks to caching. In such cases, you should set CONN_MAX_AGE to a low value or even 0 , because it doesn’t make sense to maintain a connection that’s unlikely to be reused. This will help keep the number of simultaneous connections to this database small.

The development server creates a new thread for each request it handles, negating the effect of persistent connections. Don’t enable them during development.

When Django establishes a connection to the database, it sets up appropriate parameters, depending on the backend being used. If you enable persistent connections, this setup is no longer repeated every request. If you modify parameters such as the connection’s isolation level or time zone, you should either restore Django’s defaults at the end of each request, force an appropriate value at the beginning of each request, or disable persistent connections.

Encoding¶

Django assumes that all databases use UTF-8 encoding. Using other encodings may result in unexpected behavior such as “value too long” errors from your database for data that is valid in Django. See the database specific notes below for information on how to set up your database correctly.

PostgreSQL notes¶

Django supports PostgreSQL 11 and higher. psycopg2 2.8.4 or higher is required, though the latest release is recommended.

PostgreSQL connection settings¶

See HOST for details.

To connect using a service name from the connection service file and a password from the password file, you must specify them in the OPTIONS part of your database configuration in DATABASES :

Поднимаем Django стек на MS Windows

В данной статье будет представлена подробная инструкция по установке и настройке программ Apache, Python и PostgreSQL для обеспечения работы Django проекта в ОС MS Windows. Django уже включает в себя упрощенный сервер разработки для локального тестирования кода, но для задач, связанных с продакшен, требуется более безопасный и мощный веб-сервер. Мы настроим mod_wsgi для взаимодействия с нашим проектом и настроим Apache в качестве шлюза в внешний мир.

Стоит отметить, что установка и настройка будет производиться в ОС MS Windows 10 с 32 разрядностью. Также 32 битная реакция будет универсальна и будет работать на 64 битной архитектуре. Если вам нужна 64 битная установка повторите те же действия для 64 битных дистрибутивов программ, последовательность действий будет идентична.

В качестве Django проекта будем использовать программу Severcart. Она предназначена для управления перемещениями картриджей, учёта печатающего оборудования и договоров поставки и обслуживания. Установка всех программ и модулей будет производиться в каталог C:\severcart. Местоположение не принципиально.

Python

Первым шагом является загрузка и установка Python с веб-сайта Python. Выбираем Windows в качестве операционной системы и 32-битную версию. На момент написания статьи текущей версией является 3.9.0rc2.

Загрузив файл установки, щелкните правой кнопкой мыши файл установки и выберите «Запуск от имени администратора». Вы должны увидеть экран ниже

Устанавливаем галочки напротив чекбоксов «Install launcher for add user (recomended)» и «Add Python 3.9 to PATH» и нажимаем на «Customize installation».

Устанавливаем галочки на против «pip», «py launcher», «for all users (requires elevation)» и нажимаем «Next».

Выбираем все поля ввода как на картинке выше и нажимаем на «Install».

Чтобы убедиться, что установка прошла успешно, откройте cmd и введите python. Если установка прошла успешно, вы должны увидеть приглашение, подобный приведенному ниже

Устанавливаем mod_wsgi

gohlke/pythonlibs. Модуль выполняет функции посредника межу сервером Apache и Django проектом. Самый свежий пакет будет с именем mod_wsgi-4.7.1-cp39-cp39-win32.whl. Обратите внимание, что пакет скомпилирован для 32 битной Windows CPython версии 3.9. Также стоит отметить, что очевидная установка модуля pip install mod_wsgi скорее всего завершится ошибкой, т.к. в процессе установки потребуется компилятор Visual Studio C++. Ставить компилятор целиком ради одного Python пакета в Windows считаем нецелесообразным.

Устанавливаем модуль с помощью стандартного пакетного менеджера pip в cmd или powershell:

Apache

Скачиваем дистрибутив с сайта https://www.apachelounge.com/download/.
Самая свежая версия Web-сервера является Apache 2.4.46 win32 VS16. Также для работы программы понадобиться заранее установленный пакет «Visual C++ Redistributable for Visual Studio 2019 x86».

Распаковываем дистрибутив Apache в каталог C:\severcart\Apache24, далее меняем строку с номером 37 на свою

Проверяем работу Apache, выполнив в командной строке

В результате должны увидеть в браузере по адресу 127.0.0.1 строку «It works!».

Устанавливаем службу Apache, для этого выполним в командной строке от имени Администратора инструкцию:

Далее подключим модуль mod_wsgi к Apache. Для этого выполним в командной строке инструкцию

В результате в стандартный вывод будет распечатаны строки:

Создаем файл C:\severcart\Apache24\conf\extra\httpd-wsgi.conf и копипастим туда распечатанные строки выше.

Подключаем новую конфигурацию к основному файлу httpd.conf
Include conf/extra/httpd-wsgi.conf

Сохраняем изменения, перезагружаем службы Apache

PostgreSQL

Устанавливаем PostgreSQL взятый с сайта https://postgrespro.ru/windows. Текущая версия программного продукта – 12. Преимущества Российского дистрибутива от канонического представлены на том же сайте.

Действия по установке представлены выше и комментариях не нуждаются. Установка крайне проста.

Создаем БД в postgres, где потом будут храниться структуры данных Django проекта

БД создана. Теперь разворачиваем Django проект.

Устанавливаем web приложение

Для этого скачиваем zip архив с сайта https://www.severcart.ru/downloads/ и распаковываем в каталог C:\severcart\app\

Вносим изменения в главный конфигурационный файл C:\severcart\app\conf\settings_prod.py для указания реквизитов подключения к БД

Python словарь DATABASES содержит в себе реквизиты подключения к БД. Подробности по настройке читайте здесь https://docs.djangoproject.com/en/3.1/ref/databases/#connecting-to-the-database

Устанавливаем Python пакеты значимостей для работы приложений внутри Django проекта

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

Подключаем Django приложение к серверу Apache для этого дополняем конфигурационный файл
httpd-wsgi.conf следующим текстом

Перезагружаем службу Apache и проверяем работу приложения

На этом все. Спасибо что дочитали.

В следующей статье будем создавать установочный самораспаковывающийся архив в InnoSetup для быстрого развертывания Django проекта на компьютере заказчика. Для тех кто хочет повторить все действия на Яндекс.Диск загружены все используемые дистрибутивы.

Using PostgreSQL with Django

Django is a high level full-stack open-source web framework written in Python, that encourages rapid development and clean, pragmatic design.

Django, in its ‘out-of-the-box’ state, is set up to communicate with SQLite — a lightweight relational database included with the Python distribution. So by default, Django automatically creates an SQLite database for your project.

In addition to SQLite, Django also has support for other popular databases that include PostgreSQL, MySQL, and Oracle.

However, PostgreSQL has a number of features that are not shared by the other databases Django supports, which makes it an idle choice for a Django app in production.

In this article, we will go through the integration of PostgreSQL with a Django Application.

Pre-Requirements

We are assuming you already have Django installed on your machine and one Django project up and running, if not then read the following article — Starting A Django Project

Installing PostgreSQL

Windows and macOS X users can download PostgreSQL from the official site https://www.postgresql.org/download/ and simply install it.

Note that tutorial is strictly based on Python 3

Linux User

Also, Linux users need to install some dependencies for PostgreSQL to work with Python.

Install psycopg2

Next, we need to install the PostgreSQL database adapter to communicate to the database with Python to install it run the following command in the shell.

Create A PostgreSQL User and Database

As the default configuration of Postgres is, a user called Postgres is made on, and the user Postgres has full super admin access to entire PostgreSQL instance running on your OS.

Читать:
Забыл пароль от есим 320 что делать

Now the terminal should be prefixed with postgres=# , The above command gets you the psql command-line interface in full admin mode.

Now let’s create a user and database.

Creating Database

This will create a database named mydb , note that every SQL statement must end with a semicolon.

Creating User

Here we are creating a user named myuser with password mypass . You can use any username and password you wish.

Modifying Connection Parameters

We are setting the default encoding to UTF-8 , which Django expects.

We are also setting the default transaction isolation scheme to “ read committed ”, which blocks reads from uncommitted transactions.

Lastly, we are setting the timezone by default, our Django projects will be set to use UTC. These are essential parameters recommended by the official Django team.

Granting Permission To The User

Now our user has administrative access to the database.

Now exit the SQL prompt.

Integrating PostgreSQL With Django

Open the settings.py file of your project and scroll straight to the database section, which should look like this.

We need to update these settings to integrate our PostgreSQL with the project.

Let’s quickly go over the settings,

DATABASES — This constant is a dictionary of database connection information and is required by Django. You can have multiple connections to different databases, but most of the time, you will just need an entry called default.

default — This is the default database connection configuration. You should always have a default set of connections settings.

‘ENGINE’: ‘django.db.backends.postgresql_psycopg2’ — This tells Django to use the Postgres backend. This, in turn uses psycopg2 , Python’s Postgres library which we installed earlier.

‘NAME’: ‘mydb’ — The name of the database you want to connect to.

‘USER’: ‘myuser’ — The User with access to the database.

‘PASSWORD’: ‘mypass’ — The password for your database user.

‘HOST’: ‘localhost’ — The address of the database server you want to connect to.

‘PORT’: » — The port you want to connect to, which by default is ‘5432’

Test The Database Connection

After updating the database configurations, it’s time to test the connection. The Django database migration process ensures all Django project logic associated with a database is reflected in the database itself.

During the first migration against the database, there are a series of migrations Django requires that create tables to keep track of administrators and sessions.

In the directory where manage.py script exists, run the following command.

If everything went right you should see an output like this.

Furthermore, you can now create a superuser and login to the admin dashboard.

Как использовать PostgreSQL в приложении Django

Django — это гибкий фреймворк для быстрого создания приложений Python. По умолчанию приложения Django хранят данные в легкой базе данных SQLite. Это неплохой вариант при небольших нагрузках или тестировании, однако в среде производства лучше использовать более сложную систему управления базами данных, поскольку она может повысить производительность.

В этом руководстве вы научитесь устанавливать и настраивать СУБД PostgreSQL (Postgres) для хранения данных приложения Django. Мы установим необходимое программное обеспечение, создадим учетные данные БД для нашего приложения, а затем запустим и настроим новый проект Django, который будет использовать этот бэкенд.

Требования

Для работы вам понадобится свежий сервер (мы используем Ubuntu 20.04, настроенный согласно этому руководству) и пользователь с привилегиями sudo.

Чтобы начать работу, войдите в систему как пользователь sudo.

1: Установка программного обеспечения

Сначала мы должны установить необходимые компоненты: pip (диспетчер пакетов Python), а также программное обеспечение базы данных и связанные с ним библиотеки.

Используем Python 3, который поставляется с Ubuntu 20.04. Запустите установку:

sudo apt update
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib

Закончив установку, вы можете перейти к настройке базы данных.

2: Создание базы данных и пользователя

По умолчанию Postgres использует схему так называемой «одноранговой аутентификации» для локальных подключений. По сути, это означает, что если имя пользователя операционной системы совпадает с именем пользователя Postgres, то такой пользователь может войти в систему без дополнительной аутентификации.

Во время установки Postgres в ОС был создан пользователь postgres, который соответствует пользователю postgres (администратору PostgreSQL). Этого пользователя необходимо использовать для выполнения административных задач. Вы можете использовать sudo и передать имя пользователя через флаг -u.

Войдите в интерактивную строку Postgres, набрав:

sudo -u postgres psql

Сначала мы создадим базу данных для проекта Django. Каждый проект должен иметь свою собственную, изолированную базу данных (из соображений безопасности). В этом руководстве мы условно назовем базу данных myproject, но в реальной среде лучше выбрать более описательное название:

CREATE DATABASE myproject;

Примечание: Все команды SQL следует заканчивать точкой с запятой.

Далее мы создадим пользователя базы данных, которого мы сможем использовать для подключения и взаимодействия с БД. Установите надежный и безопасный пароль:

CREATE USER myprojectuser WITH PASSWORD ‘password’;

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

ALTER ROLE myprojectuser SET client_encoding TO ‘utf8’;
ALTER ROLE myprojectuser SET default_transaction_isolation TO ‘read committed’;
ALTER ROLE myprojectuser SET timezone TO ‘UTC’;

Шифрование по умолчанию нужно установить на UTF-8, именно этот тип использует Django. Схемой изоляции транзакций по умолчанию нужно выбрать read committed, она блокирует чтение транзакций, по которым не было коммитов. Также сейчас нужно установить часовой пояс. По умолчанию проекты Django используют UTC (так рекомендует сам проект Django).

Осталось только предоставить пользователю БД права доступа к базе данных, которую вы создали:

GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;

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

Установка Django в виртуальную среду

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

Чтобы установить virtualenv, введите:

sudo pip3 install virtualenv

Создайте каталог для хранения вашего проекта Django и перейдите в него:

Вы можете создать виртуальную среду для хранения зависимостей Python вашего проекта Django при помощи команды:

python3 -m virtualenv myprojectenv

Эта команда установит локальную копию Python и pip в каталог myprojectenv в каталоге вашего проекта.

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

Командная строка изменится – это значит, что вы сейчас работаете в виртуальной среде. Она будет выглядеть примерно так:

Как только вы запустите виртуальную среду, вы можете установить официальную версию Django с помощью pip. Установите также пакет psycopg2, который позволит нам использовать нашу базу данных Postgres:

pip install Django psycopg2

Примечание: Независимо от того, какую версию Python вы используете, в виртуальной среде следует использовать команду pip (не pip3).

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

django-admin startproject myproject .

Поддержка БД Django

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

Откройте главный конфигурационный файл проекта Django, расположенный в каталоге дочернего проекта:

В нижней части файла вы увидите раздел DATABASES, который выглядит следующим образом:

В настоящее время проект использует БД SQLite. Нужно изменить это, чтобы он использовал PostgreSQL.

Во-первых, измените движок, чтобы он использовал адаптер postgresql вместо sqlite3. В качестве NAME укажите имя вашей базы данных (в данном примере она называется myproject). Также вам необходимо добавить учетные данные. Укажите имя пользователя, пароль и хост для подключения. Параметр port оставьте пустым, чтобы использовать значение по умолчанию:

Пока вы в этом файле, настройте директиву ALLOWED_HOSTS. Она определяет белый список адресов или доменных имен, которым разрешено подключаться к данной копии Django. Любые входящие запросы с заголовком Host, которого нет в этом списке, будут сброшены. Это помогает Django предотвратить определенный класс уязвимостей безопасности.

В приведенном ниже фрагменте есть несколько закомментированных примеров просто для демонстрации:

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

Когда вы закончите, сохраните и закройте файл.

Перенос данных и тестирование

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

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

/myproject
python manage.py makemigrations
python manage.py migrate

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

python manage.py createsuperuser

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

Если вы следовали руководству по начальной настройке сервера, у вас должен быть установлен брандмауэр UFW. Прежде чем вы сможете получить доступ к серверу разработки Django (он нужен для тестирования базы данных), вам необходимо открыть порт в брандмауэре.

Разрешите внешние подключения к этому порту:

sudo ufw allow 8000

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

python manage.py runserver 0.0.0.0:8000

В веб-браузере откройте доменное имя или IP-адрес вашего сервера, добавив :8000, чтобы перейти на страницу Django по умолчанию:

Вы должны увидеть стандартную приветственную страницу проекта.

Добавьте /admin в конец URL-адреса, и вы сможете получить доступ к форме входа в интерфейс администратора:

Введите имя пользователя и пароль, которые вы создали с помощью команды createsuperuser. После этого вы попадете в интерфейс администратора:

Когда вы закончите тестирование, вы можете остановить сервер разработки, нажав CTRL-C в окне терминала.

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

Заключение

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

Похожие статьи