Python 如何使用SQLAlchemy TypeDecorator向列添加方法
我正在尝试向ORM类成员添加自定义方法,以使其处理与该成员相关的事情。试着跟着我走 很遗憾,没有发生任何事件,并且成员仍然是DateTime类型:Python 如何使用SQLAlchemy TypeDecorator向列添加方法,python,sqlalchemy,Python,Sqlalchemy,我正在尝试向ORM类成员添加自定义方法,以使其处理与该成员相关的事情。试着跟着我走 很遗憾,没有发生任何事件,并且成员仍然是DateTime类型: type(doc.created) datetime.datetime 属性错误 TypeDecorator不是类型,它只是修饰类型,也就是说,它定义了在某些情况下调用的一些方法,比如在向数据库传递值或从数据库传递值时。您需要实现两种方法process\u bind\u param()和process\u result\u value()。在那里,
type(doc.created)
datetime.datetime
属性错误
TypeDecorator不是类型,它只是修饰类型,也就是说,它定义了在某些情况下调用的一些方法,比如在向数据库传递值或从数据库传递值时。您需要实现两种方法
process\u bind\u param()
和process\u result\u value()
。在那里,您可以将数据库中的值转换为/转换为您想要的任何值
例如,请参见以下内容中的JSON示例:
例如:
from datetime import datetime
from sqlalchemy.types import TypeDecorator, DATETIME
class _EnhDateTime(datetime):
def foo(self):
return 'foo'
class EnhDateTime(TypeDecorator):
impl = DATETIME
def process_result_value(self, value, dialect):
if value is not None:
value = _EnhDateTime(
value.year, value.month, value.day, value.hour, value.minute,
value.second, value.microsecond, value.tzinfo
)
return value
我们不需要实现process\u bind\u param()
,因为\u EnhDateTime
实例是datetime
实例,所以datetime
的默认绑定处理器应该可以
doc.created.foo()
from sqlalchemy.types import TypeDecorator, VARCHAR
import json
class JSONEncodedDict(TypeDecorator):
impl = VARCHAR
def process_bind_param(self, value, dialect):
if value is not None:
value = json.dumps(value)
return value
def process_result_value(self, value, dialect):
if value is not None:
value = json.loads(value)
return value
from datetime import datetime
from sqlalchemy.types import TypeDecorator, DATETIME
class _EnhDateTime(datetime):
def foo(self):
return 'foo'
class EnhDateTime(TypeDecorator):
impl = DATETIME
def process_result_value(self, value, dialect):
if value is not None:
value = _EnhDateTime(
value.year, value.month, value.day, value.hour, value.minute,
value.second, value.microsecond, value.tzinfo
)
return value