22import datetime
33import decimal
44from copy import copy
5- from functools import partial
65from typing import (
76 TYPE_CHECKING ,
87 Any ,
2423
2524from tortoise .exceptions import OperationalError
2625from tortoise .expressions import Expression , ResolveContext
27- from tortoise .fields .base import Field
2826from tortoise .fields .relational import (
2927 BackwardFKRelation ,
3028 BackwardOneToOneRelation ,
4240
4341EXECUTOR_CACHE : Dict [
4442 Tuple [str , Optional [str ], str ],
45- Tuple [list , str , list , str , Dict [ str , Callable ], str , Dict [str , str ]],
43+ Tuple [list , str , list , str , str , Dict [str , str ]],
4644] = {}
4745
4846
4947class BaseExecutor :
50- TO_DB_OVERRIDE : Dict [Type [Field ], Callable ] = {}
5148 FILTER_FUNC_OVERRIDE : Dict [Callable , Callable ] = {}
5249 EXPLAIN_PREFIX : str = "EXPLAIN"
5350 DB_NATIVE = {bytes , str , int , float , decimal .Decimal , datetime .datetime , datetime .date }
@@ -81,16 +78,6 @@ def __init__(
8178 self ._prepare_insert_statement (columns_all , has_generated = False )
8279 )
8380
84- self .column_map : Dict [str , Callable [[Any , Any ], Any ]] = {}
85- for column in self .regular_columns_all :
86- field_object = self .model ._meta .fields_map [column ]
87- if field_object .__class__ in self .TO_DB_OVERRIDE :
88- self .column_map [column ] = partial (
89- self .TO_DB_OVERRIDE [field_object .__class__ ], field_object
90- )
91- else :
92- self .column_map [column ] = field_object .to_db_value
93-
9481 table = self .model ._meta .basetable
9582 basequery = cast (QueryBuilder , self .model ._meta .basequery )
9683 self .delete_query = str (
@@ -103,7 +90,6 @@ def __init__(
10390 self .insert_query ,
10491 self .regular_columns_all ,
10592 self .insert_query_all ,
106- self .column_map ,
10793 self .delete_query ,
10894 self .update_cache ,
10995 )
@@ -114,7 +100,6 @@ def __init__(
114100 self .insert_query ,
115101 self .regular_columns_all ,
116102 self .insert_query_all ,
117- self .column_map ,
118103 self .delete_query ,
119104 self .update_cache ,
120105 ) = EXECUTOR_CACHE [key ]
@@ -194,15 +179,19 @@ def parameter(self, pos: int) -> Parameter:
194179 async def execute_insert (self , instance : "Model" ) -> None :
195180 if not instance ._custom_generated_pk :
196181 values = [
197- self .column_map [field_name ](getattr (instance , field_name ), instance )
182+ self .model ._meta .fields_map [field_name ].to_db_value (
183+ getattr (instance , field_name ), instance
184+ )
198185 for field_name in self .regular_columns
199186 ]
200187 insert_result = await self .db .execute_insert (self .insert_query , values )
201188 await self ._process_insert_result (instance , insert_result )
202189
203190 else :
204191 values = [
205- self .column_map [field_name ](getattr (instance , field_name ), instance )
192+ self .model ._meta .fields_map [field_name ].to_db_value (
193+ getattr (instance , field_name ), instance
194+ )
206195 for field_name in self .regular_columns_all
207196 ]
208197 await self .db .execute_insert (self .insert_query_all , values )
@@ -219,14 +208,18 @@ async def execute_bulk_insert(
219208 if instance ._custom_generated_pk :
220209 values_lists_all .append (
221210 [
222- self .column_map [field_name ](getattr (instance , field_name ), instance )
211+ self .model ._meta .fields_map [field_name ].to_db_value (
212+ getattr (instance , field_name ), instance
213+ )
223214 for field_name in self .regular_columns_all
224215 ]
225216 )
226217 else :
227218 values_lists .append (
228219 [
229- self .column_map [field_name ](getattr (instance , field_name ), instance )
220+ self .model ._meta .fields_map [field_name ].to_db_value (
221+ getattr (instance , field_name ), instance
222+ )
230223 for field_name in self .regular_columns
231224 ]
232225 )
@@ -292,7 +285,7 @@ async def execute_update(
292285 if isinstance (instance_field , Expression ):
293286 expressions [field ] = instance_field
294287 else :
295- value = self .column_map [field ](instance_field , instance )
288+ value = self .model . _meta . fields_map [field ]. to_db_value (instance_field , instance )
296289 values .append (value )
297290 values .append (self .model ._meta .pk .to_db_value (instance .pk , instance ))
298291 return (
0 commit comments