Comments 19
Основной смысл параметра заключается в том, чтобы при использовании критических функций, таких как удаление таблицы или всех данных из таблицы, необходимо было явно указывать тот пароль, который был передан при инициации класса. Это сделано для защиты от случайного удаления данных и от несанкционированного доступа.
Тащить метод из интерактивного взаимодействия в сам код, очень сомнительное решение, откуда взялось случайно удаление в самом коде? Да и несанкционированный доступ, тут тоже боком.
Надо ещё больше постов про ayncpg-lite, тогда мы уж точно все побежим её устанавливать!
Так и не понял чем это лучше чистой алхимии
По сути asyncpg-lite - это синтаксический сахар над Алхимией на асинхронном asyncpg драйвере, который упрощает вход в эту библиотеку. Нет необходимости отдельной настройки, создания дополнительных классов и прочее. Так же нет необходимости в знаниях синтаксиса алхимии (разве что понимания как импортировать типы данных для колонок).
Ага, спасибо, стало понятней. Зачем учить матчасть, ведь проще поставить либу которая всё страшное спрячет под капотом )
Теперь где увижу - сразу по рукам бить буду ;)
А разве принцип других библиотек не такой? В чем, в целом, их смысл и любого синтаксического сахара? Ну давайте возьмем реквест базовый. Вы сможете с нуля его написать, под капот заглядывали? Ок, идем дальше. Возьмем самую популярную библиотеку для разработки ботов - aiogram. Там синтаксического сахара нет? Это ж python, ну камон)
А зачем нужны библиотеки над библиотеками ?
Вы правда думаете что нужна еще одна библиотека, а не например предложить пул реквест ?
Вы не из JS мира случайно где на каждый 2 + 2 своя библиотека ?
Читателям статьи хочется посоветовать обратить внимание на 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 дало сбой и вы имели ввиду типы данных?
Ну и к кодстайлу опять вопросы - у вас, как минимум, как-то коряво расставлены импорты:
Импорты из third-party идут перед built-in и без пустых строк между ними
Потом целых 2 пустые строки и импорт прямо перед асинхронным контекстным тоже без пробелов...
Импорт из third-party внутри функции (и это не тяжеловесный импорт в сложном кейсе)
Ну и уровень статьи здесь явно не средний, все даже слишком разжевано
Пишу ТГ бота с использованием этой библиотеки. Возник вопрос, как можно единожды подключаться к БД при запуске бота? Скрипт сильно замедляется при 5 подключениях за одну функцию
Вам не нужны 5 подключений. Открывайте менеджер и в рамках одной сессии выполняйте ваш код. То есть - подключились и выполняете нужные вам методы в неограниченном количестве)
Asynpg-lite: лёгкость асинхронных операций на PostgreSQL с SQLAlchemy