У меня есть таблица postgresql (v.9.5), которая называется products, определенная с использованием ядра sqlalchemy:
products = Table("products", metadata,
Column("id", Integer, primary_key=True),
Column("name", String, nullable=False, unique=True),
Column("description", String),
Column("list_price", Float),
Column("xdata", JSON))
Предположим, что дата в таблице добавлена следующим образом:
id | name | description | list_price | xdata
----+------------+---------------------------+------------+--------------------------------
24 | Product323 | description of product332 | 6000 | [{"category": 1, "uom": "kg"}]
Используя код редактирования API следующим образом:
def edit_product(product_id):
if 'id' in session:
exist_data = {}
mkeys = []
s = select([products]).where(products.c.id == product_id)
rs = g.conn.execute(s)
if rs.rowcount == 1:
data = request.get_json(force=True)
for r in rs:
exist_data = dict(r)
try:
print exist_data, 'exist_data'
stmt = products.update().values(data).\
where(products.c.id == product_id)
rs1 = g.conn.execute(stmt)
return jsonify({'id': "Product details modified"}), 204
except Exception, e:
print e
return jsonify(
{'message': "Couldn't modify details / Duplicate"}), 400
return jsonify({'message': "UNAUTHORIZED"}), 401
Предполагая, что я хотел бы изменить только значение "category" в столбце xdata таблицы, не нарушая атрибут "uom" и его значение, которое являетсялучший способ достичь этого?Я попытался "цикл for", чтобы получить атрибуты существующих значений, а затем проверить с переданными изменениями значения атрибута для обновления.Я уверен, что есть лучший способ, чем этот.Пожалуйста, вернитесь с изменениями, необходимыми для упрощения этого