Как стать автором
Обновить

Комментарии 19

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

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

Видимо для лунатиков, которые в беспамятстве пишут "DROP DATABASE" )

Не давать права DB пользователю на удаление важных данных наверное религия не позволяет.

В алхимии так не пишут)

Надо ещё больше постов про ayncpg-lite, тогда мы уж точно все побежим её устанавливать!

Библиотека была полностью переписана под алхимию. Ряд методов полностью изменился, была необходимость их описать. Старые версии не актуальные, так что, технически, от старой библиотеки осталось только название и имена методов. Поэтому было принято решение повторно описать её.

Так и не понял чем это лучше чистой алхимии

По сути asyncpg-lite - это синтаксический сахар над Алхимией на асинхронном asyncpg драйвере, который упрощает вход в эту библиотеку. Нет необходимости отдельной настройки, создания дополнительных классов и прочее. Так же нет необходимости в знаниях синтаксиса алхимии (разве что понимания как импортировать типы данных для колонок).

Ага, спасибо, стало понятней. Зачем учить матчасть, ведь проще поставить либу которая всё страшное спрячет под капотом )

Теперь где увижу - сразу по рукам бить буду ;)

А разве принцип других библиотек не такой? В чем, в целом, их смысл и любого синтаксического сахара? Ну давайте возьмем реквест базовый. Вы сможете с нуля его написать, под капот заглядывали? Ок, идем дальше. Возьмем самую популярную библиотеку для разработки ботов - aiogram. Там синтаксического сахара нет? Это ж python, ну камон)

А зачем нужны библиотеки над библиотеками ?

Вы правда думаете что нужна еще одна библиотека, а не например предложить пул реквест ?

Вы не из JS мира случайно где на каждый 2 + 2 своя библиотека ?

А зачем нужен, например, docker-compose если есть чистый Docker?

Не очень корректное сравнение. Например docker compose v2 идет в виде плагина к докеру. Спросите зачем нужна плагины ? Но мы ведь про библиотеки говорим.

Читателям статьи хочется посоветовать обратить внимание на piccolo-orm.

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

Создание указанной таблицы будет что-то вроде этого

from piccolo.columns import BigInteger, Varchar, Integer
from piccolo.table import Table

class NewUsers(Table):
    user_id = BigInteger(primary_key=True, auto_increment=False)
    user_name = Varchar(length=255, default='Vasya', unique=True)
    user_surname = Varchar(length=255)
    user_age = Integer()

# Создание таблицы
await NewUsers.create_table().run()

Или для вставки что-то вроде этого, хотя там в целом как минимум 3 разных способа для вставки, но чтобы VS Code не давал ошибаться с названиями столбцов ближе всех показался вот такой:

users_to_insert = [
            NewUsers({
                NewUsers.user_id: 1,
                NewUsers.user_name: "Василий",
                NewUsers.user_surname: "Сидоренко",
                NewUsers.user_age: 40
            }),
            NewUsers({
                NewUsers.user_id: 2,
                NewUsers.user_name: "Дмитрий",
                NewUsers.user_surname: "Иванов",
                NewUsers.user_age: 30
            }),
            NewUsers({
                NewUsers.user_id: 3,
                NewUsers.user_name: "Олег",
                NewUsers.user_surname: "Смирнов",
                NewUsers.user_age: 46
            }),
            NewUsers({
                NewUsers.user_id: 4,
                NewUsers.user_name: "Петр",
                NewUsers.user_surname: "Петров",
                NewUsers.user_age: 23
            })
        ]

        # Вставка данных с обработкой конфликтов
        await NewUsers.insert(
            *users_to_insert
        ).on_conflict(
            action="DO NOTHING",
            target=NewUsers.user_id
        ).run()

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

Читал вашу предыдущую странную статью про asyncpg-lite, и в этой вы не подкачали с приколами:

Инициация класса

Скажите, вы просто использовали ChatGPT и плохой перевод, и имели ввиду именно инициализацию класса, верно?

типы колонок

Тут, уверен, тоже что-то в цепочке ChatGPT - Google Translate дало сбой и вы имели ввиду типы данных?

Ну и к кодстайлу опять вопросы - у вас, как минимум, как-то коряво расставлены импорты:

  1. Импорты из third-party идут перед built-in и без пустых строк между ними

  2. Потом целых 2 пустые строки и импорт прямо перед асинхронным контекстным тоже без пробелов...

  3. Импорт из third-party внутри функции (и это не тяжеловесный импорт в сложном кейсе)

Ну и уровень статьи здесь явно не средний, все даже слишком разжевано

Ну и к кодстайлу опять вопросы

Ну у вас же табы, камон )

Попробуйте написать большую статью с форматрированием кода, камон)

Пишу ТГ бота с использованием этой библиотеки. Возник вопрос, как можно единожды подключаться к БД при запуске бота? Скрипт сильно замедляется при 5 подключениях за одну функцию

Вам не нужны 5 подключений. Открывайте менеджер и в рамках одной сессии выполняйте ваш код. То есть - подключились и выполняете нужные вам методы в неограниченном количестве)

Наверное я что-то не понимаю или сделал не так.

Функция считала таблицу users, подключение, записала в таблицу, снова подключение

И так 5 раз)

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории