如何将VARCHAR保存在DB(MYSQL)中,而在sqlalchemy模型中保留ENUM

时间:2018-04-12 16:55:46

标签: python mysql enums orm sqlalchemy

我想在我的MYSQL DB中添加一个新的Int列,以便在sqlalchemy ORM中将它转换为ENUM。

例如,让我说我有这个枚举:

class employee_type(Enum):
    Full_time = 1
    Part_time = 2
    Student = 3

我想在DB中保留这些参数 - 1,2,3...,但是当开发人员编写涉及此模型的代码时 - 他们将只使用Enum,而不必通过getter和setter函数。

所以他们可以做到 - instance_of_model.employee_type并获得Enum。而且 - new_instance = model_name(employee_type=Employee_type.Full_time..)

我应该如何定义我的sqlalchemy模型以便它可以工作? (我听说过混合型,但不确定它会在这里起作用)

谢谢!

1 个答案:

答案 0 :(得分:0)

显然答案非常简单(!),我们不需要做任何特别的事情 - SQLAlchemy自己支持它。

含义 - 您可以在DB中将特定列设置为INT,但在模型中设置为enum,并且在查询DB时,SQLAlchemy将自行转换它。插入数据库时​​也一样:)

我将它与声明性枚举一起使用,这意味着它的值是字符串(它有一个函数 - from_string())。 所以,一旦我使用VARCHAR列,它就像一个魅力!