]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix return type hint for `Query.get()`
authorSéamus Ó Ceanainn <seamusoceanainn@gmail.com>
Wed, 10 Dec 2025 17:14:25 +0000 (12:14 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 10 Dec 2025 17:56:22 +0000 (12:56 -0500)
<!-- Provide a general summary of your proposed changes in the Title field above -->

<!-- Describe your changes in detail -->

`Query[_T].get(...)` should return `Optional[_T]` instead of `Optional[Any]`. This is typed correctly when migrating to  `Session.get(_T, ...)`. By typing the legacy `Query.get(...)` call first, it should make migrations easier on developers, as it splits up the type checking improvements (and subsequent errors which may be discovered) from the `Query.get()`
 to `Session.get()` migration.

<!-- go over following points. check them with an `x` if they do apply, (they turn into clickable checkboxes once the PR is submitted, so no need to do everything at once)

-->

This pull request is:

- [x] A documentation / typographical / small typing error fix
- Good to go, no issue or tests are needed
- [ ] A short code fix
- please include the issue number, and create an issue if none exists, which
  must include a complete example of the issue.  one line code fixes without an
  issue and demonstration will not be accepted.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.   one line code fixes without tests will not be accepted.
- [ ] A new feature implementation
- please include the issue number, and create an issue if none exists, which must
  include a complete example of how the feature would look.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.

**Have a nice day!**

Closes: #13028
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/13028
Pull-request-sha: 38ec0c3ae072f8c7b62134dd017579a6a249219f

Change-Id: I7ae8e59bc0bd0a25c65de3804d60f6c2b6f50151
(cherry picked from commit 9cd9b6b5896333f779f484c73f3c1119448305b5)

lib/sqlalchemy/orm/query.py
test/typing/plain_files/orm/typed_queries.py

index 620cd2116cd35c5685abfab2a95e1fcfa2ba81fc..a5630250930915b801601bf1e703e713d208948d 100644 (file)
@@ -1042,7 +1042,7 @@ class Query(
         ":meth:`_orm.Query.get`",
         alternative="The method is now available as :meth:`_orm.Session.get`",
     )
-    def get(self, ident: _PKIdentityArgument) -> Optional[Any]:
+    def get(self, ident: _PKIdentityArgument) -> Optional[_T]:
         """Return an instance based on the given primary key identifier,
         or ``None`` if not found.
 
index 1e305b7b20f9b957d6fe8dc596ec3fcfc0e75af5..ae83f402d3f3cf6b4d68fc3f9fb0fac31e900c1e 100644 (file)
@@ -1,5 +1,7 @@
 from __future__ import annotations
 
+from typing import assert_type
+from typing import Optional
 from typing import Tuple
 
 from sqlalchemy import Column
@@ -133,6 +135,8 @@ def t_legacy_query_single_entity() -> None:
     # EXPECTED_TYPE: User
     reveal_type(q1.one())
 
+    assert_type(q1.get(5), Optional[User])
+
     # EXPECTED_TYPE: List[User]
     reveal_type(q1.all())