MYSQL Неверное значение DOUBLE Python 3 - PullRequest
1 голос
/ 02 апреля 2020

У меня проблема с тем, чтобы заставить работать мой запрос на обновление. Я использую python 3.7 и строю gui, используя tkinter. У меня есть поле ввода, в котором пользователь может выбрать элемент по номеру идентификатора, которое автоматически заполняет следующие поля ввода, и пользователь может затем изменить записи. Моя ошибка возникает, когда приходит время сохранить изменения. У меня есть кнопка, которая вызывает функцию сохранения при нажатии. см. ниже

def save():
    conn = mysql.connect(
        host="localhost",
        user="XXXX",
        passwd="XXXX",
        database="inventory")

    c = conn.cursor()

    a0 = selectent.get()

    a1 = item.get()
    a2 = asset_tag.get()
    a3 = ammount.get()
    a4 = notes.get()

    c.execute(""" UPDATE items SET
        item = 'a1',
        asset_tag = 'a2',
        ammount = 'a3',
        notes = 'a4'

        WHERE id = 'a0' """)

    conn.commit()
    conn.close()

Я самоучка mySQL, и из того, что я прочитал об этой ошибке, видно, что ошибка возникает при попытке сравнить число и строку в предложении WHERE. Это имеет смысл, поскольку моя трассировка возвращает меня к этой строке в моем коде.

Traceback (most recent call last):
  File "C:\Users\mbrow\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "C:\Users\mbrow\AppData\Local\Programs\Python\Python37\Inventory3\editmodule.py", line 61, in save
    WHERE id = 'a0' """)
  File "C:\Users\mbrow\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\cursor_cext.py", line 266, in execute
    raw_as_string=self._raw_as_string)
  File "C:\Users\mbrow\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\connection_cext.py", line 475, in cmd_query
    sqlstate=exc.sqlstate)
mysql.connector.errors.DataError: 1292 (22007): Truncated incorrect DOUBLE value: 'a0'

Может кто-нибудь объяснить мне, чтобы я лучше понял, что происходит?

Я знаю, что сумма написана неправильно.

1 Ответ

0 голосов
/ 02 апреля 2020

Использование параметризованного запроса и подготовленного оператора

c.execute(""" UPDATE items SET
    item = %s,
    asset_tag = %s,
    ammount = %s,
    notes = %s

    WHERE id = %s """,(a1,a2,a3,a4,a0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...