|
12 | 12 | ) |
13 | 13 |
|
14 | 14 | from pydantic import BaseModel |
| 15 | +from pydantic_core import to_jsonable_python |
15 | 16 | from sqlalchemy import types |
16 | 17 | from sqlalchemy.dialects.postgresql import JSONB # for Postgres JSONB |
17 | 18 | from sqlalchemy.engine.interfaces import Dialect |
@@ -59,18 +60,20 @@ def process_bind_param( |
59 | 60 | return value.model_dump(mode="json") |
60 | 61 | if isinstance(value, list): |
61 | 62 | return [ |
62 | | - m.model_dump(mode="json") if isinstance(m, BaseModel) else m |
| 63 | + m.model_dump(mode="json") |
| 64 | + if isinstance(m, BaseModel) |
| 65 | + else to_jsonable_python(m) |
63 | 66 | for m in value |
64 | 67 | ] |
65 | 68 | if isinstance(value, dict): |
66 | 69 | return { |
67 | | - k: v.model_dump(mode="json") if isinstance(v, BaseModel) else v |
| 70 | + k: v.model_dump(mode="json") |
| 71 | + if isinstance(v, BaseModel) |
| 72 | + else to_jsonable_python(v) |
68 | 73 | for k, v in value.items() |
69 | 74 | } |
70 | 75 |
|
71 | | - raise TypeError( |
72 | | - f"Unsupported type for PydanticJSONB: {type(value)}. Expected a Pydantic model, a list of Pydantic models, or a dictionary of Pydantic models." |
73 | | - ) |
| 76 | + return to_jsonable_python(value) |
74 | 77 |
|
75 | 78 | def process_result_value( |
76 | 79 | self, value: Any, dialect: Any |
|
0 commit comments