#python #mysql #flask
Вопрос:
Я работаю над веб-инструментом в flask для автоматического создания файлов xls, поэтому я попытался создать своего рода редакцию строки в базе данных mysql, но загвоздка в том, что я хочу обновить значение только в том случае, если данные в веб-форме (не в базе данных) не являются нулевыми. Вот мой запрос
UPDATE Servi
SET Orden = CASE WHEN Orden IS NOT NULL THEN '%s' END,
Dependencia = CASE WHEN Dependencia IS NOT NULL THEN '%s' END,
Atencion = CASE WHEN Atencion IS NOT NULL THEN '%s' END,
Recibio_del_cer = CASE WHEN Recibio_del_cer IS NOT NULL THEN '%s' END,
Entrego_al_cer = CASE WHEN Entrego_al_cer IS NOT NULL THEN '%s' END,
Folio = CASE WHEN Entrego_al_cer IS NOT NULL THEN '%s' END,
...
...
...
WHERE Orden=WHERE Orden='%s'
Теперь моя проблема здесь заключается в том, что запрос обновления много вещей, как null (я думаю), вот 2 фотографии, одна показывает данные из конкретных Orden
рядом с текстовым полем для ввода новых данных в другую картинку мы видим, что происходит в строку, когда обновляется; здесь, в моем примере я изменил второе значение ( Dependencia
) из «полиции» к «транзитной» так и осталось пустым других мест
То, что я получаю, — это большая потеря данных, я не могу понять, что я делаю не так, даже то, что я делаю… вот код формы
{% extends "base_template.html" %}
{% block title %}Registro de usuarios{% endblock %}
{% block content %}
<form action="" method="post">
<label for="Orden">Orden: </label>
<input type="text" id="Orden" placeholder="{{data}}" name="Orden" required /><br>
<label for="Dependencia">Dependencia: </label>
<input type="text" id="Dependencia" name="Dependencia" /><br>
<label for="Atencion">Atencion: </label>
<input type="text" id="Atencion" name="Atencion" /><br>
<label for="Recibio_del_cer">Recibio del cer: </label>
<input type="text" id="Recibio_del_cer" name="Recibio_del_cer" /><br>
<label for="Entrego_al_cer">Entrego al cer: </label>
<input type="text" id="Entrego_al_cer" name="Entrego_al_cer" /><br>
...
...
...
<input type="submit" id="send-signup" name="signup" value="Registrar" />
</form>
{% endblock %}
Я надеюсь, что вы сможете мне помочь, я хочу изменить значение записи только в том случае, если в текстовом поле формы есть текст. Заранее спасибо
Изменить: это код, который я использую для применения запроса, надеюсь, это поможет
def edicion_form(order):
mycursor = conn.cursor()
sql = "SELECT * FROM Servi WHERE Orden='%s'"%order
mycursor.execute(sql)
result = mycursor.fetchall()
if request.method == 'POST':
Orden = request.form['Orden']
Dependencia = request.form['Dependencia']
Atencion = request.form['Atencion']
Recibio_del_cer = request.form['Recibio_del_cer']
Entrego_al_cer = request.form['Entrego_al_cer']
Folio = request.form['Folio']
Entrada = request.form['Entrada']
Equipo = request.form['Equipo']
Marca = request.form['Marca']
Modelo = request.form['Modelo']
Serie = request.form['Serie']
Unidad = request.form['Unidad']
Delegacion = request.form['Delegacion']
Accesorio = request.form['Accesorio']
Falla = request.form['Falla']
Ticket = request.form['Ticket']
Status = request.form['Status']
Reparacion = request.form['Reparacion']
Salida = request.form['Salida']
Reparo = request.form['Reparo']
Servicio = request.form['Servicio']
Reporte = request.form['Reporte']
sql2 = "UPDATE Servi SET Orden= case when Orden is not null then '%s' ELSE Orden end, Dependencia=case when Dependencia is not null then '%s' ELSE Dependencia end, Atencion=case when Atencion is not null then '%s' ELSE Atencion end, Recibio_del_cer=case when Recibio_del_cer is not null then '%s' ELSE Recibio_del_cer end, Entrego_al_cer=case when Entrego_al_cer is not null then '%s' ELSE Entrego_al_cer end, Folio=case when Entrego_al_cer is not null then '%s' ELSE Folio end, Entrada=case when Entrego_al_cer is not null then '%s' ELSE Entrada end, Equipo=case when Equipo is not null then '%s' ELSE Equipo end, Marca=case when Marca is not null then '%s' ELSE Marca end, Modelo=case when Modelo is not null then '%s' ELSE Modelo end, Serie=case when Serie is not null then '%s' ELSE Serie end, Unidad=case when Unidad is not null then '%s' ELSE Unidad end, Delegacion=case when Delegacion is not null then '%s' ELSE Delegacion end, Accesorio=case when Accesorio is not null then '%s' ELSE Accesorio end, Falla=case when Falla is not null then '%s' ELSE Falla end, Ticket=case when Ticket is not null then '%s' ELSE Ticket end, Status=case when Status is not null then '%s' ELSE Status end, Reparacion=case when Reparacion is not null then '%s' ELSE Reparacion end, Salida=case when Salida is not null then '%s' ELSE Salida end, Reparo=case when Reparo is not null then '%s' ELSE Reparo end, Servicio=case when Servicio is not null then '%s' ELSE Servicio end, Reporte=case when Reporte is not null then '%s' ELSE Reporte end WHERE Orden='%s'" %(Orden, Dependencia, Atencion, Recibio_del_cer, Entrego_al_cer, Folio, Entrada, Equipo, Marca, Modelo, Serie, Unidad, Delegacion, Accesorio, Falla, Ticket, Status, Reparacion, Salida, Reparo, Servicio, Reporte, Orden)
mycursor = conn.cursor()
mycursor.execute(sql2)
conn.commit()
return redirect("/edicion")
Ответ №1:
Либо динамически создавайте свой запрос и включайте только те вещи, которые вы хотите изменить, либо добавляйте ЕЩЕ в каждый СЛУЧАЙ, который сохраняет текущее значение, например:
Folio = CASE WHEN ... THEN ... ELSE Folio END
Но мне непонятно, почему вы так тестируете Orden IS NOT NULL
; то есть тестируете, если текущее значение не равно нулю, а не вводимые пользователем данные. Если вам нужна помощь в этом, вам нужно будет показать свой код, который создает запрос, а не форму.
Похоже, вы хотите проверить, является ли значение из формы непустым; вы бы сделали это так:
Folio = CASE WHEN LENGTH('%s') THEN '%s' ELSE Folio END
но вам нужно указать каждое значение дважды, и просто опустить предложение Folio=, если Folio не задано в форме, имеет гораздо больше смысла.
Комментарии:
1. ну, я хочу проверить, не является ли значение null, но не в базе данных, а в текстовом поле формы, я хочу изменить значение данных только в том случае, если текстовое поле формы для этого значения не равно нулю, главное здесь в том, что я хочу отредактировать значение в строке, но для этого мне нужно записать все записи в форме, поэтому я хочу отредактировать значение только в том случае, если текстовое поле в форме не пустое. построить его динамически было бы отличным вариантом, если бы я знал, как это сделать, я посмотрю, как это сделать, но я думаю, что проблема в том, что у меня есть разница между тем, что я хочу, и тем, что я прошу сделать
2. ввод из вашей формы не будет нулевым, это будут пустые строки. как я уже сказал, вам нужно будет показать свой код, который создает запрос
3. я обновил сообщение здесь, надеюсь, это поможет, должен ли я использовать «» для запроса?