"dataset" - простая работа с SQL в питоне
Для ЛЛ: разбирался как сделать простые SQL-вещи в питоне просто. Нашел "dataset" - питоновская обёртка для SQL-запросов: не ORM, не DB-API а что-то среднее.
Пост от новичка к ещё более новичкам.
Для моего маленького ТГ-бота понадобилось собирать данные, и очевидно хранить их в базе данных. Как я понял, в питоне для этого есть два подхода: по взрослому писать SQL-запросы либо использовать ORM - штука, которая сопоставляет некие питоновские классы с записями в БД. Ясен-красен второе гораздо приятнее, т.к. не обязательно знать SQL, тебя берегут от факапов с хакерскими запросами слишком продвинутых пользователей и переход от одной БД к другой делается изменением одной строчки вначале.
Почитал я про разные ORMы, и выбрал peewee. Пиви прикольный, простой в использовании и лаконичный, вобщем самое то для чайника. Изрядно его поковыряв уткнулся в проблему - не получается создавать каждому пользователю свою таблицу. Не факт что это в принципе хороший подход, но мне показалось прикольным, а значит - нужно искать варианты. И вариант был найден - штуковина под названием "dataset"
Dataset инкапсулирует SQL-запросы внутри питоновского кода, но при этом не превращает их в какие-то сущности типа классов. Тупо SQL-запросы на питоне. Круто-же!! Выглядит это так:
коннектимся к БД
db = dataset.connect( 'mysql://user:password@localhost/mydatabase' )
создаем таблицу (или открываем, если она уже есть)
table = db[ 'user' ]
вставляем запись
table.insert( dict( name='John Doe', age=46, country='China' ) )
ищем запись
chinese_users = table.find( country='China' )
elderly_users = table.find( age={'>=': 70} )
По мне - просто и удобно, и конечно можно использовать всякие питоновские штуки:
for user in db['user']:
print(user['age'])
with dataset.connect() as tx:
tx['user'].insert(dict(name='John Doe', age=46, country='China'))
Надеюсь кому-то пригодится! =)
Всем удач!
Лига программистов
1.5K постов11.4K подписчика
Правила сообщества
- Будьте взаимовежливы, аргументируйте критику
- Приветствуются любые посты по тематике программирования
- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества