- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试向 ORM 类成员添加自定义方法,以使其处理与该成员相关的事情。试图跟随 documentation .
class EnhDateTime(types.TypeDecorator):
impl = types.DateTime
def foo(self):
return "foo"
class MyDoc(Base):
id = Column(Integer, primary_key=True, autoincrement=False)
created = Column(EnhDateTime)
doc = session.query(MyDoc).filter_by(id=123).one()
不幸的是什么也没发生,成员仍然是 DateTime 类型:
type(doc.created)
datetime.datetime
doc.created.foo()
AttributeError
最佳答案
TypeDecorator 不是类型,它只是装饰类型,即它定义了一些在某些情况下调用的方法,比如当一个值被传递到/从数据库时。您需要实现 process_bind_param()
和 process_result_value()
这两个方法。在那里,您可以将数据库中的值转换为任何您想要的值。
例如,请参阅 TypeDecorator recipes section 中的 JSON 示例:
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
我们不需要实现 process_bind_param()
因为 _EnhDateTime
实例 是 datetime
实例,所以DATETIME
的默认绑定(bind)处理器应该可以。
关于python - 如何使用 SQLAlchemy TypeDecorator 向列添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652698/
我在我的 postgresql 数据库中使用 xml,我需要一个自定义类型来处理 SQLAlchemy 中的 xml 数据。 所以我制作了 XMLType 类与 xml.etree 进行通信,但它并没
我最近遇到了一个问题,非常感谢任何见解。圣诞节前,我在 PerlMonks 上发布了一个类似的问题,并提供了一些关于从 MooseX::Declare ([http://www.perlmonks.o
我正在尝试向 ORM 类成员添加自定义方法,以使其处理与该成员相关的事情。试图跟随 documentation . class EnhDateTime(types.TypeDecorator):
我正在使用 TypeDecorator 进行 Json 提取,而另一个模型将其用于其列之一。我正在使用这个 TypeDecorator 存储 python 列表对象。 def process_bind
有没有一种方法可以让枚举类在创建新数据库时自动创建,就像标准枚举一样,但也可以将它连接到运行 process_bind_param< 的 TypeDecorator/? 第一个代码块创建了一个 Enu
以前,我能够使用 Reflect 元数据获取组件的元数据。现在元数据已移动到附加到组件的一些注释。 读取元数据 type['__annotations__'][0].selector 绝对是一个 ha
我为 sqlalchemy 定义了以下自定义类型: class EnumColumnType(TypeDecorator): impl = Integer def __init__(s
我的 models.py 文件有两个模型,User 和 Job。 每个作业都将关联多个用户。 一个用户可以与多个作业相关联。 我需要能够执行类似 job.getUsers() 的操作 --> 用户对象
这个错误已经发生一天多了,但我不知道为什么。 应用程序模块 import {NgModule} from "@angular/core"; import {BrowserModule} from "@
我是一名优秀的程序员,十分优秀!