我正在尝试使用python中的Sqlalchemy binaryexpression更新postgresql表的JSON数据类型列。
示例
unit_price = 10.10
final_data = {
"price_details": {
"unit_price":unit_price,
"total_amt":testmodel.qty * unit_price
}
}
test_db = session.query(testmodel).filter(testmodel.id >= 10)
test_db.update(final_data,synchronize_session=False)
在上面的示例中,我尝试使用binaryexpression计算total_amt
。但我收到了错误。
StatementError: (exceptions.TypeError) <sqlalchemy.sql.elements.BinaryExpression object at 0x6024810> is not JSON serializable
答案 0 :(得分:1)
为了在更新中使用DB值,您必须使用DB JSON功能,而不是从Python传递序列化JSON - 更不用说Python JSON编码器不知道如何处理SQL表达式。咨询Postgresql JSON functions and operators似乎json_build_object()
或其JSONB变体是您正在寻找的内容:
unit_price = 10.10
final_data = {
"price_details": func.json_build_object(
"unit_price", unit_price,
"total_amt", testmodel.qty * unit_price
)
}
test_db = session.query(testmodel).filter(testmodel.id >= 10)
test_db.update(final_data, synchronize_session=False)