Германия наработки апи жд и ээ - ссылки https://freeapis.io/transport-for-germany https://habr.com/ru/articles/881814/ https://savinfirst.website.yandexcloud.net/templates/economy.html https://newtechaudit.ru/python-dlya-analiza-rynka-czennyh-bumag/ https://savin.wallst.ru/flask_rzd.html https://api.energy-charts.info/

Официальная справка

Про шардирование немного другой сервис
Managed Service for Sharded PostgreSQL

Есть готовая БД по Германии



Схему ERD нарисовать и схему SQL

ЖД Германии

ЖД пристегнуть к этой же базе

Не забыть про Datalens - карту военных заводов , жд станции и ээ станции, например
Ранее у меня
API

На основе apigraph
Папка ruvdsfront2
Дёрнуть ээ и записать в БД

пока наверное так или с чатом мессенджера
trackcalend1

total_power



Prices


добавить несколько записей одним запросом

INSERT INTO authors (name) VALUES ('Aldous Huxley'), ('Ray Bradbury'), ('Kurt Vonnegut').

попытка вставить строку с уже существующим значением. В таком случае можно использовать конструкцию ON CONFLICT для обработки конфликтов (ограничений).
CREATE TABLE powerprice (timep TIMESTAMP PRIMARY KEY, fprice NUMERIC(6, 2) NOT NULL);

В скрипте (из API-запроса получен формат Unix-time

INSERT INTO powerprice (timep, fprice) VALUES (TO_TIMESTAMP(1763939700),70.96) ON CONFLICT (timep) DO NOTHING;

Да, ок, возвращает

[(datetime.datetime(2025, 11, 24, 2, 15), Decimal('70.96'))]

INSERT INTO powerprice (timep, fprice) VALUES (TO_TIMESTAMP(1763938800),80.12), (TO_TIMESTAMP(1763939700),70.96) ON CONFLICT (timep) DO NOTHING;

Да, ок, возвращает

[(datetime.datetime(2025, 11, 24, 2, 15), Decimal('70.96')), (datetime.datetime(2025, 11, 24, 2, 0), Decimal('80.12'))]

CREATE USER fulluser WITH PASSWORD 'pass' SUPERUSER;

В psql SET ROLE fulluser;

CREATE DATABASE germany25;

CREATE TABLE powerprice
(timep TIMESTAMP PRIMARY KEY, fprice NUMERIC(6, 2) NOT NULL);

INSERT INTO powerprice (timep, fprice)
VALUES (TO_TIMESTAMP(1763938800),80.12)
ON CONFLICT (timep) DO NOTHING;

Отсюда (пусть будет)
async def main(): ## создаем асинхронную функцию conn = await asyncpg.connect (user='user', password='password', database='database', host='host') # подключаем к субд # создание таблицы await conn.execute(''' CREATE TABLE IF NOT EXISTS test_table ( id serial PRIMARY KEY, name text NOT NULL ) ''') # вставка данных в таблицу await conn.execute('" INSERT INTO test_table (name) VALUES ($1) ''', 'John Doe')

# выборка данных из таблицы
result = await conn.fetch
(''' SELECT * FROM test_table ''')
Делаю так
Подключение к базе данных PostgreSQL с помощью Python

import asyncio
import asyncpg

async def async_query_example():
# Подключение
conn = await asyncpg.connect('postgresql:// postgres:password@localhost:5432/mydb')

# Выполнение запроса
rows = await conn.fetch('SELECT * FROM users WHERE age > $1', 25)

for row in rows:
print(f"User: {row['name']}, Age: {row['age']}")

# Закрытие соединения
await conn.close()

# Запуск
asyncio.run(async_query_example())

оки, нет юзера fulluser в pg_hba.conf - ожидаемо

Отлично! Но нет точки с запятой нигде в запросах к БД! ?

С асинхроном еще разобраться, устаревший метод и т.д.

Про асинхрон для PostgreSQL у меня
и здесь (в .т.ч. про устаревший способ ???)

async def main():
conn = await asyncpg.connect (host='178.253....)

asyncio.run(main())

1. async в Python используется для объявления асинхронной функции (корутины). Это позволяет выполнять задачи параллельно без блокировки выполнения основной программы.
async def function_name(): await some_async_function().

2. Await — позволяет приостановить выполнение асинхронной функции (корутины) до завершения ожидаемого объекта (например, ввода-вывода).

3. asyncio.run — функция в модуле asyncio в Python, которая запускает асинхронную функцию (корутину) через цикл событий (Event Loop).
Так?

host germany25 fulluser all trust

/etc/postgresql/16/main/pg_hba.conf

Было так



Ну уже лучше, теперь возврат из корутины не то что делает



Отдельно скрипт my_bda.py отрабатывает, но при вызове из основной проги - нет



всё внутрь?

Как здесь Вот пример реализации с библиотекой aiohttp в Flask:

Или вообще вынести my_bda2.py в отдельный контейнер. Ведь в этом ГЛАВНЫЙ смысл микросервсиной

Мой docker multistage 11.10.2025

онлайн vscode Там же 28.09.2025

Микросервисная архитектура на примере Python и gRPC
Установил онлайн VS Code и создал папку .home/myprojects/pricepower

Вывод из БД на своей основе

Теперь скрипт в контейнер (по уроку от 28.09.25)
Открываю редактор
http://194.87.146.200:9090/?folder=/home/myprojects/ruvdsfront2v2

Расширение Python само собой

asyncpg хочет, но сначала
apt install python3-pip
apt install python3-asyncpg


Dockerfile

FROM python:3.10.13-alpine3.18
COPY . .
RUN pip install asyncio
RUN pip install asyncpg
CMD python app.py

Установка Docker по уроку 2

docker build -t pricepower .


107 мб (попробовать мультистейдж)

из здесь
Операторы COPY, ADD и RUN добавляют новый слой к образу.

RUN pip install asyncio && pip install asyncpg
Ничего не изменилось
docker run -p 8081:80 pricepower

влёт



и закрылся
Думать как его сервером сделать
вызвать из фронта
По примеру из интернета

FROM python:3.10.13-alpine3.18 AS build
WORKDIR /app
RUN pip install asyncio
RUN pip install asyncpg
COPY . .

FROM python:3.10.13-alpine3.18
COPY --from=build /app .

CMD python app.py

Собирается, но при запуске контейнера пишет что нет asyncpg
отсюда

FROM python:3.10.13-alpine3.18
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

requirements.txt
asyncio
asyncpg

Ok, даже чуть поменьше - 101 и 24.8 МБ
Но multistage пока не получается, не берёт asyncpg

Простой клиент-сервер
Как работать с сокетами в Python?
и здесь
Немного в сторону разобраться с этим
05.12.25
total_power как лучше добавить, целым или распарсить?

json берёт запись за день с шагом по времени, а можно добавлять по каждой отметке времени

Скользящее ли там время в запросе API?

два типа данных: json и jsonb

Хорошая статья!
Как работать с JSON в PostgreSQL

Тип json сохраняет данные в виде обычной текстовой строки.

Тип jsonb (binary JSON) — это уже структурированное представление. При сохранении данных PostgreSQL: парсит JSON и строит древовидную модель;
06.12.25 Таки структуру контейнеров - фронт (ruvdsfront3), функции(bda...) и раскидать по 3 машинам шарды по production_types не, не получится - целая ведь запись 4-я таблица распарсена по виду фронт выборка по дате и виду, умножить на цену, карту ээстанций, индекс мб и в кубернет Зазеркалье

или не timestamp а таки unix-формат?
Разработку на стринце Клиент-сервер
Потом, когда контейнеры будут готовы, продолжить https://savin.wallst.ru/my_kuber2.html Кубернет