diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 893ebeda8..c3b10d614 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -11,6 +11,10 @@ Changelog 0.25.0 (unreleased) ------ +Added +^^^^^ +- Added MySQL-specific ENUM type support for CharEnumField (#1883) + Fixed ^^^^^ - Fixed asyncio "no current event loop" deprecation warning by replacing `asyncio.get_event_loop()` with modern event loop handling using `get_running_loop()` with fallback to `new_event_loop()` (#1865) diff --git a/tortoise/fields/data.py b/tortoise/fields/data.py index 307fb6df0..d3ab8b4e7 100644 --- a/tortoise/fields/data.py +++ b/tortoise/fields/data.py @@ -13,6 +13,7 @@ from pypika_tortoise.terms import Term from tortoise import timezone +from tortoise.converters import escape_str from tortoise.exceptions import ConfigurationError, FieldError from tortoise.fields.base import Field from tortoise.timezone import get_default_timezone, get_timezone, get_use_tz, localtime @@ -761,6 +762,15 @@ def __init__( super().__init__(description=description, max_length=max_length, **kwargs) self.enum_type = enum_type + class _db_mysql: + def __init__(self, field: "CharEnumFieldInstance") -> None: + self.field = field + + @property + def SQL_TYPE(self) -> str: + enum_values = ", ".join(escape_str(e.value) for e in self.field.enum_type) + return f"ENUM({enum_values})" + def to_python_value(self, value: Union[str, None]) -> Union[Enum, None]: return self.enum_type(value) if value is not None else None