【发布时间】:2021-08-22 20:02:45
【问题描述】:
我想为我的自定义列类型设置一个列默认值。
目前我有这个:
score = Column(ScoreType, default=Score())
或
score = Column(ScoreType, ColumnDefault(Score()))
我创建了一个数据库条目,但没有使用score=Score() 明确设置分数。当我尝试访问 score 实例 (entry.score.total += 1) 时,我收到错误 AttributeError: 'NoneType' object has no attribute 'total'。
如果我创建一个明确设置分数的数据库条目,那么它就可以工作。
例如以下DateTime 类型的作品:
timestamp = Column(DateTime, ColumnDefault(datetime.datetime.now()))
我的类型类如下所示:
class ScoreType(types.TypeDecorator):
impl = types.String
def process_bind_param(self, value, dialect):
return repr(value)
def process_result_value(self, value, dialect):
return Score.create_score(value)
我为此使用了另一个类:
class Score:
def __init__(self, result: int = 0, total: int = 0):
self.total = total
self.result = result
def __repr__(self):
return f"{self.result}/{self.total}"
@classmethod
def create_score(cls, string: str) -> 'Score':
r, t = int(string.split('/'))
return cls(result=int(r), total=int(t))
知道如何设置默认值吗?
Another question on stackoverflow 处理了类似的主题。但是,它并不完全适合我的问题,并且尚未得到最终答案。
【问题讨论】:
标签: python sqlalchemy orm