【发布时间】:2017-07-07 07:10:37
【问题描述】:
我从模型中提取以下值,并尝试转换为布尔值。但是,当我运行该程序时,我收到一条错误消息,指出“无法将 jsonb 类型转换为布尔值。这里的jsonb值是布尔值,为什么不能强制转换呢?我需要改变什么?
我要获取的数据值是 {"unsubscribe" : "True"} 的布尔值
这是导致错误的行。
args.append(Customer.data['unsubscribed'].cast(sqlalchemy.Boolean) == "{}".format(True))
这是客户模型
class Customer(Base):
__tablename__ = 'customers'
id = Column(UUID, primary_key=True, server_default='uuid_generate_v4()')
phone_number = Column(String)
data = Column(JSONB)
created_at = Column(DateTime, server_default='NOW()')
updated_at = Column(DateTime, server_default='NOW()')
@property
def agent_number(self):
return self.data["agent"]["phoneNumber"]
def __repr__(self):
return '<Customer(id={}, phone_number={}, data={}, created_at={}, updated_at={})>'.format(
self.id,
self.phone_number,
self.data,
self.created_at,
self.updated_at
)
【问题讨论】:
-
我认为正确的 JSON 应该是
{"unsubscribe": true},所以它不是真正的布尔值...您需要转换为字符串,然后作为字符串进行比较。 -
但是
data['unsubscribe']会返回一个布尔值true不是吗? -
肯定有办法获取布尔值
-
这不是一个布尔值,它是一个字符串......你试过把演员排除在外吗?
标签: python casting sqlalchemy