Comments 16
Когда я последний раз смотрел Peewee, там не было встроенной поддержки One-to-Many, Many-to-Many. Т.е. в pony, например, можно сделать так:
И у вас есть готовое поле для связанной коллекции категорий. В peewee есть такое?
В yoyo можно выполнить миграцию вне транзакции, столкнулся с такой необходимостью, но не могу найти в документации ничего на этот счет?
categories = Set('Category', table='item_category', column='category_id')
И у вас есть готовое поле для связанной коллекции категорий. В peewee есть такое?
В yoyo можно выполнить миграцию вне транзакции, столкнулся с такой необходимостью, но не могу найти в документации ничего на этот счет?
0
А мне кажется, что синтаксис PonyORM как раз очень удобный. Как можно не любить генераторы и лямбы?
0
P.S. Подскажите, кто знает — PonyORM продолжает развиваться? Потому что уже больше года как назад видел шикарную презентацию его создателей, где они грозились выпустить версию 0.8 с поддержкой миграций, но пока нет её.
0
ORM — зло!
-1
Альтернатива yoyo: alembic.sqlalchemy.org использовать алхимию не обязательно.
0
Ребята! Подскажите, пожалуйста, проверенную в бою асинхронную ORM питоновскую для postgres. Хочу что-то такое попробовать, но не знаю на чем остановится: GINO, asyncpg, aiopg
0
Я пробовал asyncpg и peewee-async.
В одном из недавних проектов у меня есть 2 компонента, которые пересекаются на базе. Один — асинхронный, а второй на Django.
Миграциями я управляю через Django (и считаю его миграции лучшими среди всех), модели всей базы, соответственно, тоже первыми делаются в джанге.
Второй же компонент я сделал на peewee-async, поскольку декларации моделей из джанги переносятся с минимальными изменениями на peewee.
На «чистом» asyncpg я делал проект, в котором в базу писалось очень большим потоком и на SQL, поскольку так было просто удобнее в том проекте. Как таковых моделей там нет, поэтому это не совсем ORM.
В одном из недавних проектов у меня есть 2 компонента, которые пересекаются на базе. Один — асинхронный, а второй на Django.
Миграциями я управляю через Django (и считаю его миграции лучшими среди всех), модели всей базы, соответственно, тоже первыми делаются в джанге.
Второй же компонент я сделал на peewee-async, поскольку декларации моделей из джанги переносятся с минимальными изменениями на peewee.
На «чистом» asyncpg я делал проект, в котором в базу писалось очень большим потоком и на SQL, поскольку так было просто удобнее в том проекте. Как таковых моделей там нет, поэтому это не совсем ORM.
0
ну это мне кажется каким-то костылем, если честно. связывать django с чем-то другим — это уже какой-то фетиш, имхо. а что-то про tortoise orm слышали? tortoise-orm.readthedocs.io/en/latest
0
Не слышал, спасибо за ссылку. Но версия 0.13.0 как-то не выглядит production-ready.
Насчет костыля — ну тут можно поспорить… Джанго для веба и для миграций пока сложно чем-то заменить.
А для другого компонента я выбрал asyncio-стек и там прикручивать к монолиту с джангой было бы еще большим костылем.
Насчет костыля — ну тут можно поспорить… Джанго для веба и для миграций пока сложно чем-то заменить.
А для другого компонента я выбрал asyncio-стек и там прикручивать к монолиту с джангой было бы еще большим костылем.
0
Минусом [Pony] можно назвать синтаксис запросов в этой ORM — он весьма специфический, с применением генераторов, лямбд и прочих языковых плюшек Питона.
По-моему это наоборот большой плюс, которым я активно пользуюсь, так как позволяет писать по сути обычный питоновый код, который в большинстве случаев просто работает. Правда, pylint выпадает в осадок от таких лямбд
0
Для мелких скриптов, там где городить ORM не хочется, сделал такой маппер sqlmapper, по сравнению c sqlalchemy (+reflect), код выходит компактней и быстрее, примеры:
И добавление таблиц/колонок если ещё не созданы:
db = Connection(db='example') # mysql/psql/sqlite
db.tblname.insert({'name': 'Ubuntu', 'value': 14})
# INSERT INTO `tblname` (`name`, `value`) VALUES ('Ubuntu', 14)
for d in db.tblname.find({'name': 'Ubuntu'}):
# SELECT tblname.* FROM `tblname` WHERE `tblname`.`name`='Ubuntu'
print(d)
И добавление таблиц/колонок если ещё не созданы:
# a table is created for first column
db.tblname.add_column('id', 'INT(11)', primary=True, auto_increment=True, exist_ok=True)
# CREATE TABLE `tblname` (`id` INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY ...
db.tblname.add_column('name', 'VARCHAR(32)', exist_ok=True)
# ALTER TABLE `tblname` ADD COLUMN `name` VARCHAR(32)
0
похоже на dataset dataset.readthedocs.io/en/latest (на основе SQLAlchemy)
0
Sign up to leave a comment.
Мелкая питонячая радость #8: мелкие удовольствия для работы с БД