LINUX.ORG.RU
ФорумTalks

Там алхимию подвезли с асинхронностью и тайп-хинтингом

 , ,


0

5

SQLAlchemy 1.4.0 Released, а новости до сих пор нет, напишите кто-нибудь обзор. Как никак самый большой выпуск за несколько лет.

★★★★★

Последнее исправление: vvn_black (всего исправлений: 1)

с асинхронностью

там не тру асинхронность

eternal_sorrow ★★★★★
()
Ответ на: комментарий от vvn_black

А что толку от этого описания? Если ты используешь ORM для описания базы, ты будешь использовать его и для выполнения запросов.

eternal_sorrow ★★★★★
()

Complete support for Python asyncio for both Core and ORM. This new system leverages the greenlet context-switching library to adapt the entirety of SQLAlchemy to be usable behind a very thin asyncio front-end while operating directly against asyncio database drivers within the asyncio event loop, with no need for thread executors.

Вообще, я не до конца понимаю, как это работает. Кто объяснит, как можно без экзекьюторов обернуть синхронный питоновский код в асинхронщину? Что делает этот greenlet?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

будешь использовать его и для выполнения запросов

Вместе с aiopg использовал для описания схемы, а в запросах только как expression language.

vvn_black ★★★★★
() автор топика
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от vvn_black

Не очень понимаю, как. Ты использовал декларативное описание базы, но потом делал запросы от него через aiopg? Если нет, то ты не использовал ORM, только Core.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Поддерживаю вопрос со стороны Java: зачем нужны всякие Ktor, Helidon, Quarkus и прочая реактивщина, если Hibernate на корню рубит весь смысл, а R2DBC и Hibernate Reactive — вообще не понятно что с поддержкой полутора БД.

DarkAmateur ★★★★
()
Ответ на: комментарий от eternal_sorrow

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

Как-то так, насколько помню:

class User(Base):
    __tablename__ = 'user_account'

    first_name = Column(String(40), nullable=False)


await conn.execute(select([User]).where(User.first_name = 'Иван')

Но, в итоге, схема была на объектах Table.

vvn_black ★★★★★
() автор топика
Ответ на: комментарий от vvn_black

Но, в итоге, схема была на объектах Table.

Именно. Так это и работает. У меня всё так же. А так как ты описал в своём фрагменте кода - не работает.

Только вот Table - это Core а не ORM. Что и требовалось доказать: SA Core - годнота, SA ORM - говно без задач.

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 2)
Ответ на: комментарий от bread

Зависит от задач. Если например делать MVC веб приложение, то без ORM обойтись сложно.

eternal_sorrow ★★★★★
()

Gino же есть. Ненужно в сущности. У меня и так асинхронная алхимия.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Программы имеют свойство незаметно усложняться

ahdenchik
()
Ответ на: комментарий от WitcherGeralt

У меня в прошлом проекте вся работа с отдельными записями шла через ORM, а агрегации и подобное были написаны на SQL (именованные запросы, разложенные по файликам), было вполне удобно. Миграции тоже на нормальном постгресовом DDL были написаны, алембик с алхимией не использовались. Удобно и практично.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

Как ORM она ни о чём. Change my mind.

Говно полное, даже чистые запросы приятнее фигарить

pi11 ★★★★★
()
Ответ на: комментарий от eternal_sorrow

А тебе как нравится? Мне джанго отлично заходит, очень чисто и коротко получается. Правда я не настоящий сварщик.

pi11 ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Лично я, почти все что выходит за рамки where - либо меняю логику базы, либо юзаю чистый sql. Сложные запросы на орм фигарить мне нравится.

pi11 ★★★★★
()
Ответ на: комментарий от DarkAmateur

ORM must die!!

Программеры идут на невероятные ухищрения опускаясь в глубины ОРМ чтобы зоставить ОРМ выполнять SQL быстро вместо того чтобы написать простой запрос.

grim ★★☆☆
()
Ответ на: комментарий от eternal_sorrow

В настоящее время sqlalchemy хороша только как query builder. Как ORM она ни о чём. Change my mind

Исправляю тебя: ORM не нужно. Никакое.

При этом сам пишу объектную СУБД в памяти, бг-г.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

ORM не нужно

Сильное заявление. Проверять я его конечно не буду.

eternal_sorrow ★★★★★
()

Уже багфиксы приехали sqlalchemy-1.4.1-released

SQLAlchemy 1.4 establishes itself as the starting point for the SQLAlchemy 2.0 project, which will move fully to Python 3 only as well as finalize the new APIs introduced in release 1.4.0.

Учитывая текущий темп накручивания версий, к тому времени уже будет python 4, наверное

qaqa ★★
()
Ответ на: комментарий от WitcherGeralt

У меня в прошлом проекте вся работа с отдельными записями шла через ORM, а агрегации и подобное были написаны на SQL (именованные запросы, разложенные по файликам), было вполне удобно.

Может и удобно, только сложность поддержки удваивается. Теперь нужно разбираться и в конкретном ORM, и в SQL. Причем от SQL в любом случае никуда не денешься, абстракция слишком уж протекает.

bread
()
Ответ на: комментарий от eternal_sorrow

В настоящее время sqlalchemy хороша только как query builder

Я как-то разгребал проект с кучей таких запросов. И это так утомительно транслировать всё в SQL чтобы понять, чего хотели писатели и почему это сделано неправильно. А писатели наверняка выполняли обратную трансляцию натягивая SQL на глобус. Это как общаться через переводчика, хотя можно было нативно разговаривать.

bread
()
Ответ на: комментарий от WitcherGeralt

Элементарно. Проект переходит в легаси и через n лет попадает ко мне для оптимизации запросов. Я хорошо разбираюсь в SQL и особенностях СУБД, но совершенно не знаю вашего ORM. И вот мне приходится разбираться еще и дополнительно с ним.

bread
()
Ответ на: комментарий от bread

совершенно не знаю вашего ORM

Подай заявку на курсы повышения квалификации.

WitcherGeralt ★★
()
Ответ на: комментарий от bread

И вот мне приходится разбираться еще и дополнительно с ним.

Постоянно приходится с чем-то разбираться. Притом, что там нет никакого рокетсайенса.

А сложные запросы динамически строить без подобных тулзов сильно менее удобно.

qaqa ★★
()
Ответ на: комментарий от WitcherGeralt

batch insert

Попрошу подробнее...
В моём опыте postgresql + pandas это загрузка csv через буфер. Только так приемлимая скоро ть insert'а достигается.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

Не путай с bulk, batch — пачка — может состоять и из жалких десяти записей. Речь не про скорость вставки, а про удобство формирования запроса.

WitcherGeralt ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.