[英]How do I map WTForms field for a db.Enum model on Flask-SQLAlchemy model?
[英]How to keep VARCHAR in the DB (MYSQL), but ENUM in the sqlalchemy model
我想向我的 MYSQL 數據庫添加一個新的 Int 列,以便在 sqlalchemy ORM 中將其轉換為 ENUM。
例如,假設我有這個枚舉:
class employee_type(Enum):
Full_time = 1
Part_time = 2
Student = 3
我想在數據庫中保留這些參數 - 1,2,3...
,但是當開發人員編寫涉及此 model 的代碼時 - 他們將只使用Enum
,而不必通過 getter 和 setter 函數使用 go 。
因此他們將能夠執行 - instance_of_model.employee_type
並獲得一個Enum
。 並且 - new_instance = model_name(employee_type=Employee_type.Full_time..)
我應該如何定義我的 sqlalchemy model 才能正常工作? (我聽說過混合類型,但不確定它在這里是否有效)
謝謝!
顯然答案是超級簡單(!),我們不需要做任何特別的事情-SQLAlchemy本身就支持它。
含義-您可以在數據庫中將特定列設置為INT
,但在模型中將其enum
,並且在查詢數據庫時,SQLAlchemy會自行對其進行轉換。 插入數據庫時也是如此:)
我將其與聲明性枚舉一起使用,這意味着它的值是字符串(並且它具有一個函數from_string()
)。 因此,一旦我使用VARCHAR
列,它就可以發揮作用了!
如果本機類型枚舉可用,Sqlalchemy 檢查數據庫。
如果數據庫不支持,則默認類型為 VARCHAR。
這樣你就可以
Enum(MyEnum, native_enum=False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.