Sqlalchemy使用python中的binaryexpression更新json列

时间:2017-09-11 10:45:15

标签: python json postgresql sqlalchemy

我正在尝试使用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  

1 个答案:

答案 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)