Ask HN: Python ORM Solutions in 2025?
We are currently using SQLAlchemy extensively for Python to PostgreSQL interactions. I have found the experience almost universally terrible, there is very little static type hinting, unexpected API choices and runtime errors.
I was expecting there to be a popular, modern, Pydantic like ORM tool for defining well typed DB tables in Python and was very surprised to find that not the case. After spending some time looking into this it seems there are a few very young projects (tortoise, piccolo etc) but no well-known, stable solution.
What are folks using for DB interactions in Python and what has your experience been?
SQLAlchemy is still arguably the most featureful and robust ORM in Python (although it is much more than an ORM). It is likely the best default choice unless you're already working within a framework that offers its own ORM.
SQLAlchemy does support type annotations [0], am curious what issues you're running into there?
[0]: https://docs.sqlalchemy.org/en/20/orm/extensions/mypy.html
One example: ``` class Base(DeclarativeBase): pass
class Foo(Base): name: Mapped[str]
x = Foo() ```
does not get caught as a type error statically, I'm assuming because all records are treated as mutable.
However, `x = Foo(name=2)` also doesn't get caught by pyright, which seems wrong. I could be misusing somehow though.
I don't think SQLAlchemy officially supports pyright,, although it would be great if they did given all the headaches people have had with mypy.
Oh wow, just found the `MappedAsDataclass` release in 2.0. This is exactly what I'm looking for, thanks!
[dead]