From 0f65f15b4f934dd9da21e35bfdd926a6944b8d35 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Mon, 7 Jul 2025 22:23:00 +0300 Subject: [PATCH 01/12] add: In database-connection.md added a block with package installation --- .../python/design/database-connection.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/databases/development/python/design/database-connection.md b/docs/databases/development/python/design/database-connection.md index f08612d..57609c9 100644 --- a/docs/databases/development/python/design/database-connection.md +++ b/docs/databases/development/python/design/database-connection.md @@ -20,6 +20,22 @@ Благодаря этому мы сможем использовать **всю мощь PostgreSQL прямо из кода на Python** — просто, эффективно и без необходимости использовать ORM. +## Установка пакета + +Перед тем как начать рассматривать возможности адаптера `psycopg` необходимо установить пакет для Python. + +Как написано в [документации](https://www.psycopg.org/psycopg3/docs/basic/install.html#installation) для начала нужно убедиться, что менеджер пакетов `pip` не ниже версии 20.3: + +```bash +pip install --upgrade pip +``` + +Затем установить пакет `psycopg[binary]`, поскольку он не требует установку системных пакетов: + +```bash +pip install "psycopg[binary]" +``` + ## Основы API библиотеки `psycopg` Библиотека `psycopg` предоставляет несколько ключевых интерфейсов для работы с PostgreSQL в соответствии со стандартом [**Python DB API 2.0**](https://peps.python.org/pep-0249/). From 860119ebdce986cfd3ebff8906130d3609491429 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Mon, 7 Jul 2025 22:25:07 +0300 Subject: [PATCH 02/12] fix: rewrite pkg installation --- .../development/python/design/database-connection.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/databases/development/python/design/database-connection.md b/docs/databases/development/python/design/database-connection.md index 57609c9..3a1a3dd 100644 --- a/docs/databases/development/python/design/database-connection.md +++ b/docs/databases/development/python/design/database-connection.md @@ -22,15 +22,15 @@ ## Установка пакета -Перед тем как начать рассматривать возможности адаптера `psycopg` необходимо установить пакет для Python. +Прежде чем приступить к изучению возможностей адаптера `psycopg`, необходимо установить соответствующий пакет для Python. -Как написано в [документации](https://www.psycopg.org/psycopg3/docs/basic/install.html#installation) для начала нужно убедиться, что менеджер пакетов `pip` не ниже версии 20.3: +Как указано в официальной документации, сначала убедитесь, что версия менеджера пакетов `pip` не ниже 20.3: ```bash pip install --upgrade pip ``` -Затем установить пакет `psycopg[binary]`, поскольку он не требует установку системных пакетов: +Затем установите пакет `psycopg[binary]`, который не требует наличия системных зависимостей: ```bash pip install "psycopg[binary]" From c4a67128a07cdbd8aa999b835a439c4901615c76 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Mon, 7 Jul 2025 23:21:00 +0300 Subject: [PATCH 03/12] =?UTF-8?q?fix:=20=D0=9D=D0=B5=20=D0=BD=D0=B0=D1=88?= =?UTF-8?q?=D0=B5=D0=BB=20=D1=82=D0=B0=D0=BA=D0=BE=D0=B3=D0=BE=20=D0=B0?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=B1=D1=83=D1=82=D0=B0=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BA=D0=B2=D0=B0=D1=80=D0=B3=D0=BE=D0=B2,=20=D0=BA=D0=B0?= =?UTF-8?q?=D0=BA=20application=5Fname.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../development/python/design/database-connection.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/databases/development/python/design/database-connection.md b/docs/databases/development/python/design/database-connection.md index 3a1a3dd..ee177a0 100644 --- a/docs/databases/development/python/design/database-connection.md +++ b/docs/databases/development/python/design/database-connection.md @@ -85,8 +85,7 @@ psycopg.connect( user="postgres", password="secret", dbname="mydb", - connect_timeout=10, - application_name="myapp" + connect_timeout=10 ) ``` @@ -94,7 +93,7 @@ psycopg.connect( Также можно использовать DSN-строку: ```python -psycopg.connect("postgresql://postgres:secret@localhost:5432/mydb") +psycopg.connect(conninfo="postgresql://postgres:secret@localhost:5432/mydb") ``` ### 2. Пул подключений (рекомендуемый способ) From acdcb7b760896616d2e8a5f7a86efde9aaa3cfc9 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Mon, 7 Jul 2025 23:27:57 +0300 Subject: [PATCH 04/12] =?UTF-8?q?fix:=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BB=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D1=8B=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC,=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=BD=D0=B0=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D1=82=D1=8C=20=D1=87=D1=82=D0=BE=20=D0=BA?= =?UTF-8?q?=D0=B0=D0=B6=D0=B4=D1=8B=D0=B9=20=D0=B8=D0=B7=20=D0=B7=D0=BD?= =?UTF-8?q?=D0=B8=D1=85=20=D0=BE=D0=B7=D0=BD=D0=B0=D1=87=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/design/database-connection.md | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/docs/databases/development/python/design/database-connection.md b/docs/databases/development/python/design/database-connection.md index ee177a0..2eb1e77 100644 --- a/docs/databases/development/python/design/database-connection.md +++ b/docs/databases/development/python/design/database-connection.md @@ -77,18 +77,12 @@ conn.close() - По умолчанию `psycopg` использует неавтоматические транзакции: нужно вызывать `conn.commit()` или `conn.rollback()`. Параметры подключения: - -```python -psycopg.connect( - host="localhost", - port=5432, - user="postgres", - password="secret", - dbname="mydb", - connect_timeout=10 -) - -``` +- **host** — адрес сервера PostgreSQL (Например, `localhost` для локального подключения); +- **port** — порт, на котором работает PostgreSQL (По умолчанию - 5432); +- **user** — имя пользователя PostgreSQL; +- **password** — пароль пользователя; +- **dbname** — имя базы данных, к которой осуществляется подключение; +- **connect_timeout** (необязательный параметр) — таймаут в секундах при установке соединения. Также можно использовать DSN-строку: From f82f4ea5f0dc935118d6cd2c292b5cc920dd2e7c Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Mon, 7 Jul 2025 23:38:54 +0300 Subject: [PATCH 05/12] =?UTF-8?q?add:=20=D0=A3=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20psycopg=5Fpool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../python/design/database-connection.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/docs/databases/development/python/design/database-connection.md b/docs/databases/development/python/design/database-connection.md index 2eb1e77..1e5875d 100644 --- a/docs/databases/development/python/design/database-connection.md +++ b/docs/databases/development/python/design/database-connection.md @@ -20,9 +20,9 @@ Благодаря этому мы сможем использовать **всю мощь PostgreSQL прямо из кода на Python** — просто, эффективно и без необходимости использовать ORM. -## Установка пакета +## Установка библиотеки -Прежде чем приступить к изучению возможностей адаптера `psycopg`, необходимо установить соответствующий пакет для Python. +Прежде чем приступить к изучению возможностей адаптера `psycopg`, необходимо установить соответствующую библиотеку для Python. Как указано в официальной документации, сначала убедитесь, что версия менеджера пакетов `pip` не ниже 20.3: @@ -30,12 +30,18 @@ pip install --upgrade pip ``` -Затем установите пакет `psycopg[binary]`, который не требует наличия системных зависимостей: +Затем установите модуль `psycopg[binary]`, который не требует наличия системных зависимостей: ```bash pip install "psycopg[binary]" ``` +Установите `psycopg_pool`: + +```bash +pip install psycopg_pool +``` + ## Основы API библиотеки `psycopg` Библиотека `psycopg` предоставляет несколько ключевых интерфейсов для работы с PostgreSQL в соответствии со стандартом [**Python DB API 2.0**](https://peps.python.org/pep-0249/). @@ -94,6 +100,8 @@ psycopg.connect(conninfo="postgresql://postgres:secret@localhost:5432/mydb") Объект `ConnectionPool` из модуля `psycopg_pool` управляет множеством соединений с базой данных. Это более производительный и устойчивый способ подключения в реальных приложениях. +pip install psycopg_pool + #### Пример: ```python From 2c523b746e2f54bc45fccbfe40c22e8eb7f37c83 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Sun, 20 Jul 2025 14:24:33 +0300 Subject: [PATCH 06/12] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../development/python/design/database-connection.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/databases/development/python/design/database-connection.md b/docs/databases/development/python/design/database-connection.md index 1e5875d..0074461 100644 --- a/docs/databases/development/python/design/database-connection.md +++ b/docs/databases/development/python/design/database-connection.md @@ -294,14 +294,12 @@ pool = ConnectionPool( ```python import os - from dotenv import load_dotenv from fastapi import FastAPI, Response, status +from config.db import pool load_dotenv() -from config.db import pool - app = FastAPI() port = int(os.getenv("PORT", 3000)) From b5e6d37467e6fe44ef4a50277153f829de066861 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Sun, 20 Jul 2025 15:03:48 +0300 Subject: [PATCH 07/12] =?UTF-8?q?=D0=9E=D0=BF=D0=B5=D1=87=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=20=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= =?UTF-8?q?=20pytest=20-v?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/databases/development/python/coding/repository.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/databases/development/python/coding/repository.md b/docs/databases/development/python/coding/repository.md index 2fbb84e..b0ad4f2 100644 --- a/docs/databases/development/python/coding/repository.md +++ b/docs/databases/development/python/coding/repository.md @@ -754,7 +754,7 @@ def test_delete_user_not_found(mock_conn): После этого выполните команду ```bash -pytest-v +pytest -v ``` Если вы все сделали правильно, все тесты пройдены. From 85583ad3e05441e1d674c44722663e8e705a4227 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Sun, 20 Jul 2025 15:24:49 +0300 Subject: [PATCH 08/12] datetime.utcnow() -> datetime.now() --- .../development/python/coding/repository.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/databases/development/python/coding/repository.md b/docs/databases/development/python/coding/repository.md index b0ad4f2..89c286c 100644 --- a/docs/databases/development/python/coding/repository.md +++ b/docs/databases/development/python/coding/repository.md @@ -597,7 +597,7 @@ def test_create_user_error(mock_conn): ) def test_get_all_users_success(mock_conn): - now = datetime.utcnow() + now = datetime.now() expected = [{ "id": 1, "user_name": "john", @@ -634,7 +634,7 @@ def test_get_all_users_error(mock_conn): def test_get_user_by_id_success(mock_conn): - now = datetime.utcnow() + now = datetime.now() expected = { "user_name": "john", "first_name": "John", @@ -687,7 +687,7 @@ def test_get_user_by_username_not_found(mock_conn): def test_update_user_success(mock_conn): - now = datetime.utcnow() + now = datetime.now() earlier = now - timedelta(hours=1) dto = { @@ -1283,7 +1283,7 @@ def test_create_post_success(mock_conn): expected = { "id": 1, "text": dto["text"], - "created_at": datetime.utcnow(), + "created_at": datetime.now(), "reply_to_id": None, } @@ -1336,7 +1336,7 @@ def test_create_post_success(mock_conn): expected = { "id": 1, "text": dto["text"], - "created_at": datetime.utcnow(), + "created_at": datetime.now(), "reply_to_id": None, } @@ -1502,7 +1502,7 @@ def test_get_all_posts_error(mock_conn): def test_get_post_by_id_success(mock_conn): user_id = 1 post_id = 1 - now = datetime.utcnow() + now = datetime.now() row = { "post_id": post_id, From 890b980f18a3cd22f68dc3b6512f24ee3d043e6f Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Sun, 20 Jul 2025 15:29:20 +0300 Subject: [PATCH 09/12] =?UTF-8?q?add:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=B2=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20create=5Fuser(dto:=20dict)=20=D0=B2=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B2=D0=BA=D1=83=20=D0=BF=D0=BE=D0=BB=D1=8F=20created=5Fat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../development/python/coding/repository.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/databases/development/python/coding/repository.md b/docs/databases/development/python/coding/repository.md index 89c286c..b8620b8 100644 --- a/docs/databases/development/python/coding/repository.md +++ b/docs/databases/development/python/coding/repository.md @@ -132,8 +132,8 @@ from psycopg.rows import dict_row def create_user(dto: dict) -> dict: query = """ - INSERT INTO users (user_name, first_name, last_name, password_hash) - VALUES (%s, %s, %s, %s) + INSERT INTO users (user_name, first_name, last_name, password_hash, created_at) + VALUES (%s, %s, %s, %s, %s) RETURNING id, user_name, password_hash, status; """ values = ( @@ -141,6 +141,7 @@ def create_user(dto: dict) -> dict: dto["first_name"], dto["last_name"], dto["password_hash"], + "NOW()", ) with pool.connection() as conn: @@ -282,8 +283,8 @@ from psycopg.rows import dict_row def create_user(dto: dict) -> dict: query = """ - INSERT INTO users (user_name, first_name, last_name, password_hash) - VALUES (%s, %s, %s, %s) + INSERT INTO users (user_name, first_name, last_name, password_hash, created_at) + VALUES (%s, %s, %s, %s, %s) RETURNING id, user_name, password_hash, status; """ values = ( @@ -291,6 +292,7 @@ def create_user(dto: dict) -> dict: dto["first_name"], dto["last_name"], dto["password_hash"], + "NOW()", ) with pool.connection() as conn: @@ -324,8 +326,8 @@ from psycopg.rows import dict_row def create_user(dto: dict) -> dict: query = """ - INSERT INTO users (user_name, first_name, last_name, password_hash) - VALUES (%s, %s, %s, %s) + INSERT INTO users (user_name, first_name, last_name, password_hash, created_at) + VALUES (%s, %s, %s, %s, %s) RETURNING id, user_name, password_hash, status; """ values = ( @@ -333,6 +335,7 @@ def create_user(dto: dict) -> dict: dto["first_name"], dto["last_name"], dto["password_hash"], + "NOW()", ) with pool.connection() as conn: From ad67d1d1bf8bc57c6bb452e864757524badb64d3 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Sun, 20 Jul 2025 15:31:26 +0300 Subject: [PATCH 10/12] =?UTF-8?q?fix:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=20test=5Fcreate?= =?UTF-8?q?=5Fuser=5Ferror,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=BF=D1=80=D0=BE=D1=85=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B8=D0=B7-=D0=B7=D0=B0=20=D1=82=D0=BE=D0=B3=D0=BE,?= =?UTF-8?q?=20=D1=87=D1=82=D0=BE=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D1=81=D1=82=D0=B0=D0=B2=D0=BA=D1=83=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8F=20created=5Fat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/databases/development/python/coding/repository.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/databases/development/python/coding/repository.md b/docs/databases/development/python/coding/repository.md index b8620b8..7af4bd2 100644 --- a/docs/databases/development/python/coding/repository.md +++ b/docs/databases/development/python/coding/repository.md @@ -597,6 +597,7 @@ def test_create_user_error(mock_conn): dto["first_name"], dto["last_name"], dto["password_hash"], + "NOW()", ) def test_get_all_users_success(mock_conn): From d97388204f018a3de870e9ad227b5512a95d9ad1 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:03:18 +0300 Subject: [PATCH 11/12] =?UTF-8?q?fix:=20=D0=9F=D0=B5=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=B2=D0=B0=D0=BB=D1=81=D1=8F=20=D0=BB=D0=B8=D1=88=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20=D1=82=D1=80=D0=B5=D1=82=D0=B8=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20(post=5Fid,=20user?= =?UTF-8?q?=5Fid,=20post=5Fid)=20->=20(post=5Fid,=20user=5Fid)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../development/python/coding/repository.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/databases/development/python/coding/repository.md b/docs/databases/development/python/coding/repository.md index 7af4bd2..69401c4 100644 --- a/docs/databases/development/python/coding/repository.md +++ b/docs/databases/development/python/coding/repository.md @@ -1216,7 +1216,7 @@ def like_post(post_id: int, user_id: int) -> None: try: with pool.connection() as conn: with conn.cursor() as cur: - cur.execute(query, (post_id, user_id, post_id)) + cur.execute(query, (post_id, user_id)) if cur.rowcount == 0: raise ValueError("Post not found") except UniqueViolation as err: @@ -1241,7 +1241,7 @@ def dislike_post(post_id: int, user_id: int) -> None: with pool.connection() as conn: with conn.cursor() as cur: - cur.execute(query, (post_id, user_id, post_id)) + cur.execute(query, (post_id, user_id)) if cur.rowcount == 0: raise ValueError("Post not found") ``` @@ -1672,7 +1672,7 @@ def test_like_post_success(mock_conn): assert "insert into likes (post_id, user_id)" in normalized_sql params = mock_cursor.execute.call_args[0][1] - assert params == (post_id, user_id, post_id) + assert params == (post_id, user_id) def test_like_post_error(mock_conn): @@ -1691,7 +1691,7 @@ def test_like_post_error(mock_conn): assert "insert into likes (post_id, user_id)" in normalized_sql params = mock_cursor.execute.call_args[0][1] - assert params == (post_id, user_id, post_id) + assert params == (post_id, user_id) def test_like_post_already_liked(mock_conn): @@ -1722,7 +1722,7 @@ def test_dislike_post_success(mock_conn): assert "delete from likes where post_id = %s and user_id = %s" in normalized_sql params = mock_cursor.execute.call_args[0][1] - assert params == (post_id, user_id, post_id) + assert params == (post_id, user_id) def test_dislike_post_error(mock_conn): @@ -1741,7 +1741,7 @@ def test_dislike_post_error(mock_conn): assert "delete from likes where post_id = %s and user_id = %s" in normalized_sql params = mock_cursor.execute.call_args[0][1] - assert params == (post_id, user_id, post_id) + assert params == (post_id, user_id) def test_dislike_post_not_found(mock_conn): @@ -1760,7 +1760,7 @@ def test_dislike_post_not_found(mock_conn): assert "delete from likes where post_id = %s and user_id = %s" in normalized_sql params = mock_cursor.execute.call_args[0][1] - assert params == (post_id, user_id, post_id) + assert params == (post_id, user_id) ``` ::: From dff6a48cb8d0362d98e8cd93ed78f0375cc063e4 Mon Sep 17 00:00:00 2001 From: Serafim Oleynik <65561644+Tminww@users.noreply.github.com> Date: Sun, 20 Jul 2025 16:07:21 +0300 Subject: [PATCH 12/12] =?UTF-8?q?fix:=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D1=83=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0=20created=5Fat=20=3D?= =?UTF-8?q?=20NOW()=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=20=D0=B8=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../development/python/coding/repository.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/docs/databases/development/python/coding/repository.md b/docs/databases/development/python/coding/repository.md index 69401c4..e612a1f 100644 --- a/docs/databases/development/python/coding/repository.md +++ b/docs/databases/development/python/coding/repository.md @@ -132,8 +132,8 @@ from psycopg.rows import dict_row def create_user(dto: dict) -> dict: query = """ - INSERT INTO users (user_name, first_name, last_name, password_hash, created_at) - VALUES (%s, %s, %s, %s, %s) + INSERT INTO users (user_name, first_name, last_name, password_hash) + VALUES (%s, %s, %s, %s) RETURNING id, user_name, password_hash, status; """ values = ( @@ -141,7 +141,6 @@ def create_user(dto: dict) -> dict: dto["first_name"], dto["last_name"], dto["password_hash"], - "NOW()", ) with pool.connection() as conn: @@ -283,8 +282,8 @@ from psycopg.rows import dict_row def create_user(dto: dict) -> dict: query = """ - INSERT INTO users (user_name, first_name, last_name, password_hash, created_at) - VALUES (%s, %s, %s, %s, %s) + INSERT INTO users (user_name, first_name, last_name, password_hash) + VALUES (%s, %s, %s, %s) RETURNING id, user_name, password_hash, status; """ values = ( @@ -292,7 +291,6 @@ def create_user(dto: dict) -> dict: dto["first_name"], dto["last_name"], dto["password_hash"], - "NOW()", ) with pool.connection() as conn: @@ -326,8 +324,8 @@ from psycopg.rows import dict_row def create_user(dto: dict) -> dict: query = """ - INSERT INTO users (user_name, first_name, last_name, password_hash, created_at) - VALUES (%s, %s, %s, %s, %s) + INSERT INTO users (user_name, first_name, last_name, password_hash) + VALUES (%s, %s, %s, %s) RETURNING id, user_name, password_hash, status; """ values = ( @@ -335,7 +333,6 @@ def create_user(dto: dict) -> dict: dto["first_name"], dto["last_name"], dto["password_hash"], - "NOW()", ) with pool.connection() as conn: @@ -597,7 +594,6 @@ def test_create_user_error(mock_conn): dto["first_name"], dto["last_name"], dto["password_hash"], - "NOW()", ) def test_get_all_users_success(mock_conn):