Значение sqlite не будет обновляться - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь обновить информацию custommer ("cliente") в базе данных Sqlite, но есть только одно значение, которое не будет обновляться. Когда я пытался обновить столбец «fechaDeuda» (дата долга), он просто не делал этого. Странно то, что я кодировал функцию для обработки всех обновлений, и она отлично работает во всех остальных случаях, даже когда она вызывается в «Problemati c Line» (см. Код ниже), функция выполняет каждый оператор обновления базы данных. и не выдает никаких исключений, но все равно значение в базе данных не изменяется .

Вот код, в котором я обновляю три значения в одной строке:

try:
    table = 'clientes'
    _cliente = sqGenericSelectOne(table, None, 'id', generic.id)  # This function retrieves one row based on the arguments passed
    clienteID = _cliente[0]
    fecha = date_time.split(' - ')[0]
    sqUpdateOne(table, 'fechaDeuda', fecha, 'id', clienteID)  #### Problematic line (!!!)
    nuevoSaldo = float(_cliente[9]) - _pago
    if nuevoSaldo < 0:
        nuevoSaldo = 0
    sqUpdateOne(table, 'saldo', nuevoSaldo, 'id', clienteID)  # This line works fine
    nuevoTotalPagado = float(_cliente[11]) + _pago
    sqUpdateOne(table, 'totalPagado', nuevoTotalPagado, 'id', clienteID)  # This one works fine too
except Exception as e:
    error(0, e)

** Редактировать (по какой-то причине это было стерто, когда я писал) ** Вот код sqUpdateOne :

# Sqlite database value updater
def sqUpdateOne(table, column, newValue, refColumn, refValue):
    try:
        with conn:
            c.execute(f'''UPDATE {table} SET {column} = {newValue} WHERE {refColumn} = {refValue}''')
            print()
            return
    except Exception as e:
        error(3, e, table)
        return

А вот как создается база данных «клиенты» в случае необходимости. Стол отлично работает для всего остального. Я отслеживаю это, используя https://sqliteonline.com/

 table = 'clientes'
        try:
            c.execute(f'''CREATE TABLE {table} (
            id integer,
            nombre text,
            apellido text,
            valoracion real,
            direccion text,
            tel_1 text,
            tel_2 text,
            correo text,
            cantServicios integer,
            saldo real,
            fechaDeuda text,
            totalPagado real,
            descripcion text)''')
            state(2)
        except Exception as e:
            error(2, e, table)

Редактировать: Я добавляю сюда скриншот sqUpdateOne при вызове для обновления 'fecha', так что вы, ребята, может видеть значения, которые он получает (опять же, он прекрасно работает во всех остальных случаях): enter image description here

И вот скриншот содержимого базы данных перед попыткой обновить его (оно остается прежним после ) enter image description here

Заранее спасибо!

1 Ответ

1 голос
/ 26 февраля 2020

Я думаю, что вы получаете исключение при выполнении sqUpdateOne() для столбца fechaDeuda, потому что строка запроса не совсем корректна. Поскольку это текстовый столбец, вам нужно заключить значение в кавычки.

Поэтому измените настройку переменной fecha, чтобы заключить ее в кавычки:

fecha = f'"{date_time.split(' - ')[0]}"'

Sidenote: you также может удалить явные операторы return в sqUpdateOne(), когда вы вернетесь из функции любым способом после этих строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...