簡體   English   中英

如何在 DB (MYSQL) 中保留 VARCHAR,但在 sqlalchemy model 中保留 ENUM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM