|
|
|
|
|
by jsmeaton
2142 days ago
|
|
Adding new SQL support to the Django ORM is tricky. There isn’t a nice low level abstraction for generating and composing SQL. It’s mostly a bunch of lists containing different kinds of data (strings, Col, Expression) and they don’t compose well. On top of that, you’d need to come up with a decent frontend syntax that aligned with the existing methods. I think Django made a mistake when first defining the language of aggregates by overloading the values() method and not using group(). To support rollup, values() would need to support it but only when used after an annotate. Not nice. I often think about what it’d take to use alchemy for the sql building beneath the Django frontend. That would open up so many more possibilities and features. |
|
I also ended up writing a very tiny transformer function and using that directly because core only has a couple supported casts and I needed Postgres timestamp types so I could extract and rollup on the year / month / day. That gave me some insight in to some of the patterns in use in “lower level” Django differ from the expressiveness / composability of SQLAlchemy.