@@ -22,6 +22,7 @@ _Model: TypeAlias = Model
2222_M = TypeVar ("_M" , bound = Model , default = Model )
2323# __get__/__set__ value type. Bare Field defaults to Field[Any].
2424_V = TypeVar ("_V" , default = Any )
25+ _DatabaseType : TypeAlias = Database | DatabaseProxy
2526
2627# Common field kwargs, Unpack-ed into the field __new__ overloads.
2728@type_check_only
@@ -80,7 +81,7 @@ SNAKE_CASE_STEP2: Final[re.Pattern[str]]
8081IDENTIFIER_RE : Final [re .Pattern [str ]]
8182
8283def make_identifier (s : str ) -> str : ...
83- def chunked (it , n ) -> Generator [list [Incomplete ]]: ...
84+ def chunked (it : Iterable [ _T ] , n : int ) -> Generator [list [_T ]]: ...
8485
8586class _callable_context_manager :
8687 def __call__ (self , fn ): ...
@@ -227,7 +228,7 @@ class BaseTable(Source):
227228class _BoundTableContext (_callable_context_manager ):
228229 table : Incomplete
229230 database : Incomplete
230- def __init__ (self , table , database ) -> None : ...
231+ def __init__ (self , table , database : _DatabaseType ) -> None : ...
231232 def __enter__ (self ): ...
232233 def __exit__ (
233234 self , exc_type : type [BaseException ] | None , exc_val : BaseException | None , exc_tb : TracebackType | None
@@ -241,8 +242,8 @@ class Table(_HashableSource, BaseTable): # type: ignore[misc]
241242 self , name , columns = None , primary_key = None , schema : str | None = None , alias = None , _model = None , _database = None
242243 ) -> None : ...
243244 def clone (self ) -> Table : ...
244- def bind (self , database = None ) -> Self : ...
245- def bind_ctx (self , database = None ) -> _BoundTableContext : ...
245+ def bind (self , database : _DatabaseType | None = None ) -> Self : ...
246+ def bind_ctx (self , database : _DatabaseType | None = None ) -> _BoundTableContext : ...
246247 def select (self , * columns ) -> Select : ...
247248 def insert (self , insert = None , columns = None , ** kwargs ) -> Insert : ...
248249 def replace (self , insert = None , columns = None , ** kwargs ): ...
@@ -438,7 +439,7 @@ class SQL(ColumnBase):
438439 def __init__ (self , sql , params = None ) -> None : ...
439440 def __sql__ (self , ctx ): ...
440441
441- def Check (constraint , name = None ) -> Node : ...
442+ def Check (constraint : str , name : str | None = None ) -> SQL | NodeList : ...
442443def Default (value ) -> SQL : ...
443444
444445class Function (ColumnBase ):
@@ -565,17 +566,17 @@ class OnConflict(Node):
565566class BaseQuery (Node ):
566567 default_row_type : Incomplete
567568 def __init__ (self , _database = None , ** kwargs ) -> None : ...
568- def bind (self , database = None ) -> Self : ...
569+ def bind (self , database : _DatabaseType | None = None ) -> Self : ...
569570 def clone (self ) -> Self : ...
570571 def dicts (self , as_dict : bool = True ) -> Self : ...
571572 def tuples (self , as_tuple : bool = True ) -> Self : ...
572573 def namedtuples (self , as_namedtuple : bool = True ) -> Self : ...
573574 def objects (self , constructor = None ) -> Self : ...
574575 def __sql__ (self , ctx ) -> None : ...
575576 def sql (self ) -> tuple [str , list [Any ]]: ... # Returns (sql, params), params are bound query values
576- def execute (self , database = None ): ...
577- async def aexecute (self , database = None ): ...
578- def iterator (self , database = None ): ...
577+ def execute (self , database : _DatabaseType | None = None ): ...
578+ async def aexecute (self , database : _DatabaseType | None = None ): ...
579+ def iterator (self , database : _DatabaseType | None = None ): ...
579580 def __iter__ (self ): ...
580581 def __getitem__ (self , value ): ...
581582 def __len__ (self ) -> int : ...
@@ -612,20 +613,20 @@ class SelectQuery(Query):
612613 def select_from (self , * columns ) -> Select : ...
613614
614615class SelectBase (_HashableSource , Source , SelectQuery ): # type: ignore[misc]
615- def peek (self , database = None , n : int = 1 ): ...
616- def first (self , database = None , n : int = 1 ): ...
617- def scalar (self , database = None , as_tuple : bool = False , as_dict : bool = False ): ...
618- def scalars (self , database = None ) -> Generator [Incomplete ]: ...
619- def count (self , database = None , clear_limit : bool = False ) -> int : ...
620- def exists (self , database = None ) -> bool : ...
621- def get (self , database = None ): ...
616+ def peek (self , database : _DatabaseType | None = None , n : int = 1 ): ...
617+ def first (self , database : _DatabaseType | None = None , n : int = 1 ): ...
618+ def scalar (self , database : _DatabaseType | None = None , as_tuple : bool = False , as_dict : bool = False ): ...
619+ def scalars (self , database : _DatabaseType | None = None ) -> Generator [Incomplete ]: ...
620+ def count (self , database : _DatabaseType | None = None , clear_limit : bool = False ) -> int : ...
621+ def exists (self , database : _DatabaseType | None = None ) -> bool : ...
622+ def get (self , database : _DatabaseType | None = None ): ...
622623
623624class CompoundSelectQuery (SelectBase ):
624625 lhs : Incomplete
625626 op : Incomplete
626627 rhs : Incomplete
627628 def __init__ (self , lhs , op , rhs ) -> None : ...
628- def exists (self , database = None ) -> bool : ...
629+ def exists (self , database : _DatabaseType | None = None ) -> bool : ...
629630 def __sql__ (self , ctx ): ...
630631
631632class Select (SelectBase ):
@@ -672,8 +673,8 @@ class _WriteQuery(Query):
672673 def cte (self , name , recursive : bool = False , columns = None , materialized = None ) -> CTE : ...
673674 def returning (self , * returning ) -> Self : ...
674675 def apply_returning (self , ctx ): ...
675- def execute_returning (self , database ): ...
676- def handle_result (self , database , cursor ): ...
676+ def execute_returning (self , database : _DatabaseType ): ...
677+ def handle_result (self , database : _DatabaseType , cursor ): ...
677678 def __sql__ (self , ctx ): ...
678679
679680class Update (_WriteQuery ):
@@ -697,7 +698,7 @@ class Insert(_WriteQuery):
697698 def get_default_data (self ): ...
698699 def get_default_columns (self ) -> list [Incomplete ] | None : ...
699700 def __sql__ (self , ctx ): ...
700- def handle_result (self , database , cursor ): ...
701+ def handle_result (self , database : _DatabaseType , cursor ): ...
701702
702703class Delete (_WriteQuery ):
703704 def __sql__ (self , ctx ): ...
@@ -753,12 +754,17 @@ class ColumnMetadata(NamedTuple):
753754 primary_key : Incomplete
754755 table : Incomplete
755756 default : Incomplete
757+ full_type : str | None = None
758+ identity : bool = False
756759
757760class ForeignKeyMetadata (NamedTuple ):
758761 column : Incomplete
759762 dest_table : Incomplete
760763 dest_column : Incomplete
761764 table : Incomplete
765+ name : str | None = None
766+ on_delete : str | None = None
767+ on_update : str | None = None
762768
763769class ViewMetadata (NamedTuple ):
764770 name : Incomplete
@@ -814,9 +820,10 @@ class Database(_callable_context_manager):
814820 autoconnect : Incomplete
815821 thread_safe : Incomplete
816822 connect_params : Incomplete
823+ def __deepcopy__ (self , memo : Any ) -> Self : ...
817824 def __init__ (
818825 self ,
819- database ,
826+ database : str | None ,
820827 thread_safe : bool = True ,
821828 autorollback : bool = False ,
822829 field_types = None ,
@@ -827,7 +834,7 @@ class Database(_callable_context_manager):
827834 ) -> None : ...
828835 database : Incomplete
829836 deferred : Incomplete
830- def init (self , database , ** kwargs ) -> None : ...
837+ def init (self , database : str | None , ** kwargs ) -> None : ...
831838 def __enter__ (self ) -> Self : ...
832839 def __exit__ (
833840 self , exc_type : type [BaseException ] | None , exc_val : BaseException | None , exc_tb : TracebackType | None
@@ -895,10 +902,10 @@ class SqliteDatabase(Database):
895902 truncate_table : bool
896903 nulls_ordering : bool
897904 def __init__ (
898- self , database , pragmas = None , regexp_function : bool = False , rank_functions : bool = False , * args , ** kwargs
905+ self , database : str | None , pragmas = None , regexp_function : bool = False , rank_functions : bool = False , * args , ** kwargs
899906 ) -> None : ...
900907 returning_clause : Incomplete
901- def init (self , database , pragmas = None , timeout : int = 5 , returning_clause = None , ** kwargs ) -> None : ...
908+ def init (self , database : str | None , pragmas = None , timeout : int = 5 , returning_clause = None , ** kwargs ) -> None : ...
902909 def pragma (self , key , value = ..., permanent : bool = False , schema : str | None = None ): ...
903910 cache_size : Incomplete
904911 foreign_keys : Incomplete
@@ -1006,7 +1013,7 @@ class PostgresqlDatabase(Database):
10061013 psycopg3_adapter : Incomplete
10071014 def init (
10081015 self ,
1009- database ,
1016+ database : str | None ,
10101017 register_unicode : bool = True ,
10111018 encoding = None ,
10121019 isolation_level = None ,
@@ -1050,7 +1057,8 @@ class MySQLDatabase(Database):
10501057 safe_create_index : bool
10511058 safe_drop_index : bool
10521059 sql_mode : str
1053- def init (self , database , ** kwargs ) -> None : ...
1060+ mariadb : bool
1061+ def init (self , database : str | None , mariadb : bool | None = None , ** kwargs ) -> None : ...
10541062 def is_connection_usable (self ) -> bool : ...
10551063 def default_values_insert (self , ctx ): ...
10561064 def begin (self , isolation_level : str | None = None ) -> None : ...
@@ -1495,6 +1503,7 @@ class TimestampField(BigIntegerField[_V]):
14951503 resolution : Incomplete
14961504 ticks_to_microsecond : Incomplete
14971505 utc : Incomplete
1506+ formats : Incomplete
14981507
14991508 @overload
15001509 def __new__ (cls , * args : Any , null : Literal [True ], ** kwargs : Unpack [_FieldKwargs ]) -> TimestampField [datetime | None ]: ...
@@ -1677,7 +1686,7 @@ class _SortedFieldList:
16771686class SchemaManager :
16781687 model : Incomplete
16791688 context_options : Incomplete
1680- def __init__ (self , model , database = None , ** context_options ) -> None : ...
1689+ def __init__ (self , model , database : _DatabaseType | None = None , ** context_options ) -> None : ...
16811690
16821691 @property
16831692 def database (self ): ...
@@ -1731,7 +1740,7 @@ class Metadata:
17311740 def __init__ (
17321741 self ,
17331742 model ,
1734- database = None ,
1743+ database : _DatabaseType | None = None ,
17351744 table_name = None ,
17361745 indexes = None ,
17371746 primary_key = None ,
@@ -1778,7 +1787,7 @@ class Metadata:
17781787 def get_primary_keys (self ): ...
17791788 def get_default_dict (self ): ...
17801789 def fields_to_index (self ) -> list [Incomplete ]: ...
1781- def set_database (self , database ) -> None : ...
1790+ def set_database (self , database : _DatabaseType ) -> None : ...
17821791 def set_table_name (self , table_name ) -> None : ...
17831792
17841793class SubclassAwareMetadata (Metadata ):
@@ -1806,7 +1815,7 @@ class _BoundModelsContext(_callable_context_manager):
18061815 database : Incomplete
18071816 bind_refs : Incomplete
18081817 bind_backrefs : Incomplete
1809- def __init__ (self , models , database , bind_refs , bind_backrefs ) -> None : ...
1818+ def __init__ (self , models , database : _DatabaseType , bind_refs , bind_backrefs ) -> None : ...
18101819 def __enter__ (self ): ...
18111820 def __exit__ (
18121821 self , exc_type : type [BaseException ] | None , exc_val : BaseException | None , exc_tb : TracebackType | None
@@ -1820,7 +1829,7 @@ class Model(metaclass=ModelBase):
18201829 @classmethod
18211830 def validate_model (cls ) -> None : ...
18221831 @classmethod
1823- def alias (cls , alias = None ) -> ModelAlias : ...
1832+ def alias (cls , alias = None ) -> ModelAlias [ Self ] : ...
18241833 @classmethod
18251834 def select (cls , * fields ) -> ModelSelect [Self ]: ...
18261835 @classmethod
@@ -1846,7 +1855,7 @@ class Model(metaclass=ModelBase):
18461855 @classmethod
18471856 def bulk_update (cls , model_list , fields , batch_size = None ): ...
18481857 @classmethod
1849- def noop (cls ) -> NoopModelSelect : ...
1858+ def noop (cls ) -> NoopModelSelect [ Self ] : ...
18501859 @classmethod
18511860 def get (cls , * query , ** filters ) -> Self : ...
18521861 @classmethod
@@ -1875,9 +1884,9 @@ class Model(metaclass=ModelBase):
18751884 def __ne__ (self , other ) -> Expression | bool : ... # type: ignore[override]
18761885 def __sql__ (self , ctx ): ...
18771886 @classmethod
1878- def bind (cls , database , bind_refs : bool = True , bind_backrefs : bool = True , _exclude = None ) -> bool : ...
1887+ def bind (cls , database : _DatabaseType , bind_refs : bool = True , bind_backrefs : bool = True , _exclude = None ) -> bool : ...
18791888 @classmethod
1880- def bind_ctx (cls , database , bind_refs : bool = True , bind_backrefs : bool = True ) -> _BoundModelsContext : ...
1889+ def bind_ctx (cls , database : _DatabaseType , bind_refs : bool = True , bind_backrefs : bool = True ) -> _BoundModelsContext : ...
18811890 @classmethod
18821891 def table_exists (cls ): ...
18831892 @classmethod
@@ -1891,12 +1900,12 @@ class Model(metaclass=ModelBase):
18911900 @classmethod
18921901 def add_index (cls , * fields , ** kwargs ) -> None : ...
18931902
1894- class ModelAlias (Node ):
1895- def __init__ (self , model , alias = None ) -> None : ...
1903+ class ModelAlias (Node , Generic [ _M ] ):
1904+ def __init__ (self , model : type [ _M ] , alias = None ) -> None : ...
18961905 def __getattr__ (self , attr : str ): ...
18971906 def __setattr__ (self , attr : str , value ) -> None : ...
18981907 def get_field_aliases (self ) -> list [Incomplete ]: ...
1899- def select (self , * selection ) -> ModelSelect : ...
1908+ def select (self , * selection ) -> ModelSelect [ _M ] : ...
19001909 def __call__ (self , ** kwargs ): ...
19011910 def __sql__ (self , ctx ): ...
19021911
@@ -1936,8 +1945,10 @@ class BaseModelSelect(_ModelQueryHelper):
19361945 __sub__ = except_
19371946 def __iter__ (self ): ...
19381947 def prefetch (self , * subqueries ): ...
1939- def get (self , database = None ): ...
1940- def get_or_none (self , database = None ): ...
1948+ def with_related (self , * loads : Load | ForeignKeyField [Any ] | BackrefAccessor ) -> Self : ...
1949+ def iterator (self , database : _DatabaseType | None = ...) -> Iterator [Any ]: ...
1950+ def get (self , database : _DatabaseType | None = None ): ...
1951+ def get_or_none (self , database : _DatabaseType | None = None ): ...
19411952 def group_by (self , * columns ) -> Self : ...
19421953
19431954class ModelCompoundSelectQuery (BaseModelSelect , CompoundSelectQuery ): # type: ignore[misc]
@@ -1948,8 +1959,8 @@ class ModelSelect(BaseModelSelect, Select, Generic[_M]): # type: ignore[misc]
19481959 model : type [_M ]
19491960 def __init__ (self , model , fields_or_models , is_default : bool = False ) -> None : ...
19501961 def __iter__ (self ) -> Iterator [_M ]: ...
1951- def get (self , database = None ) -> _M : ...
1952- def get_or_none (self , database = None ) -> _M | None : ...
1962+ def get (self , database : _DatabaseType | None = None ) -> _M : ...
1963+ def get_or_none (self , database : _DatabaseType | None = None ) -> _M | None : ...
19531964 def clone (self ) -> Self : ...
19541965 def select (self , * fields_or_models ) -> ModelSelect [_M ]: ...
19551966 def select_extend (self , * columns ) -> Self : ...
@@ -1963,7 +1974,7 @@ class ModelSelect(BaseModelSelect, Select, Generic[_M]): # type: ignore[misc]
19631974 def create_table (self , name , safe : bool = True , ** meta ): ...
19641975 def __sql_selection__ (self , ctx , is_subquery : bool = False ): ...
19651976
1966- class NoopModelSelect (ModelSelect ):
1977+ class NoopModelSelect (ModelSelect [ _M ] ):
19671978 def __sql__ (self , ctx ): ...
19681979
19691980class _ModelWriteQueryHelper (_ModelQueryHelper ):
@@ -1982,7 +1993,7 @@ class ModelInsert(_ModelWriteQueryHelper, Insert): # type: ignore[misc]
19821993
19831994class ModelDelete (_ModelWriteQueryHelper , Delete ): ... # type: ignore[misc]
19841995
1985- class ManyToManyQuery (ModelSelect ):
1996+ class ManyToManyQuery (ModelSelect [ _M ] ):
19861997 def __init__ (self , instance , accessor , rel , * args , ** kwargs ) -> None : ...
19871998 def add (self , value , clear_existing : bool = False ) -> None : ...
19881999 def remove (self , value ): ...
@@ -2053,6 +2064,16 @@ class PrefetchQuery(_PrefetchQuery):
20532064
20542065def prefetch (sq , * subqueries ): ...
20552066
2067+ class Load (Node ):
2068+ def __init__ (
2069+ self ,
2070+ rel : ForeignKeyField [Any ] | BackrefAccessor ,
2071+ query : ModelSelect [Any ] | None = ...,
2072+ strategy : int = ...,
2073+ per_parent : int | None = ...,
2074+ ) -> None : ...
2075+ def then (self , * children : Load | ForeignKeyField [Any ] | BackrefAccessor ) -> Self : ...
2076+
20562077__all__ = [
20572078 "AnyField" ,
20582079 "AsIs" ,
@@ -2104,6 +2125,7 @@ __all__ = [
21042125 "IPField" ,
21052126 "JOIN" ,
21062127 "JSONField" ,
2128+ "Load" ,
21072129 "ManyToManyField" ,
21082130 "Model" ,
21092131 "ModelIndex" ,
0 commit comments