Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用SQLAlchemy TypeDecorator向列添加方法_Python_Sqlalchemy - Fatal编程技术网

Python 如何使用SQLAlchemy TypeDecorator向列添加方法

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()。在那里,

我正在尝试向ORM类成员添加自定义方法,以使其处理与该成员相关的事情。试着跟着我走

很遗憾,没有发生任何事件,并且成员仍然是DateTime类型:

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