【发布时间】:2017-03-08 12:52:26
【问题描述】:
我正在使用 sqlalchemy 和 flask-sqlalchemy,我的一个 db 模型带有一个状态列
class Item(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(8))
state = db.Column(db.Integer, default=ServerState.IN_PACKAGE, nullable=True)
def init_state(self):
self.state = State1
def transit_state(self):
self.state.next(self)
问题是这个状态列作为整数保存到db中,但是为了实现合适的状态机,它被实现为一个类:
class State1(BaseState):
__int = 100
__name = 'State1'
@staticmethod
def next(item):
if item.contidition1 is None or item.condition2 is None:
raise InvalidStateTransition
item.state = State2
这很好用并且保持代码干净,但关键问题是当我想将项目提交到数据库时,它肯定会给我错误:
Incorrect integer value: '<class 'app.models.Item.State1'>' for column 'state' at row 1
那么,有没有办法让 session 或 python 在保存到 db 时自动将类转换为其 int 表示,并在从 db 中检索时从 int 转换为其状态类?
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy