2017-09-11 12 views
0

pythonでSqlalchemy binaryexpressionを使用してpostgresql表のJSONデータ型列を更新しようとしています。上記の例ではPythonでbinaryexpressionを使用しているSqlalchemy 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を計算しようとしています。しかし、私はエラーが発生しています。あなたの更新にDB値を使用するためには

StatementError: (exceptions.TypeError) <sqlalchemy.sql.elements.BinaryExpression object at 0x6024810> is not JSON serializable 

答えて

0

、あなたはDB JSONを使用する必要がパイソンからのシリアル化されたJSONを渡す代わります - PythonのJSONエンコーダはSQLをどうするかは考えていないことを言及しないように表現。 Postgresql JSON functions and operatorsと相談すると、

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) 
のようになります( json_build_object()またはそのJSONB)。
関連する問題