Найти - Пользователи
Полная версия: запрос UPDATE к mariadb
Начало » Базы данных » запрос UPDATE к mariadb
1 2
ffrr
Пытаюсь выполнть запрос:
 db_connect()
sql = """UPDATE permissions SET deviceID='%s' WHERE userID='%d'""" % (mac, username)
data = (mac, username)
cursor.execute(sql, data)
con.commit()

выдает:
 Traceback (most recent call last):
  File "./auth.py", line 109, in <module>
    cursor.execute(sql, data)
  File "/opt/lib/python3.8/site-packages/pymysql/cursors.py", line 161, in execute
  File "/opt/lib/python3.8/site-packages/pymysql/cursors.py", line 140, in mogrify
TypeError: not all arguments converted during string formatting

проверял переменные mac и username: mac
 <class 'str'>

username
 <class 'int'>
ffrr
такой запрос тоже не проходит:
 cursor.execute("UPDATE permissions SET deviceID='{mac}' WHERE userID='{username}'")

в ответ ничего не выдает, хотя через print видно, что сам запрос правильный:
 UPDATE permissions SET deviceID='90:0e:b3:13:bc:50' WHERE userID='659605758501'
py.user.next
Ты не должен питоном подставлять поля. Так может быть посажена уязвимость. В модулях для работы с СУБД обычно есть встроенные средства подстановки полей, которые принимают меры против уязвимостей. Это те же подстановки, только защищённые.

Если же питоном подставляешь, используй str.format() (она более развита, чем старый процент)
  
sql = """UPDATE permissions SET deviceID='{}' WHERE userID='{}'""".format(mac, username)

  
>>> mac = 123
>>> username = 'abc'
>>> sql = """UPDATE permissions SET deviceID='{}' WHERE userID='{}'""".format(mac, username)
>>> sql
"UPDATE permissions SET deviceID='123' WHERE userID='abc'"
>>>
ffrr
попробовал, но к сожалению значение device ID в базе не обновляется, при этом никаких ошибок не выводится:
                                 print(mac)
                                print(type(mac))
                                print(username)
                                print(type(username))
                                print("Authentication success")
                                db_connect()
                                sql = """UPDATE permissions SET deviceID='{}' WHERE userID='{}'""".format(mac, username)
                                cursor.execute(sql)
                                con.commit()

при запуске выдает:
 90:0e:b3:13:bc:50
<class 'str'>
659605758501
<class 'int'>
Authentication success

и в БД остается старое значение.
xam1816
ffrr
и в БД остается старое значение.
Зайди в базу данных и в самой базе данных выполни запрос с нужными данными,посмотри меняются ли значения,
Если поменялись,сделай этот же запрос средствами python пока без форматирования строки
ffrr
проверял делая запрос в самой БД-значения менялись. Как сделать запрос в python без форматирования строки ума не приложу)) уже столько вариантов перепробовал… Возмоно так?
 cursor.execute("UPDATE permissions SET deviceID='a4:3e:a0:b4:c6:ac' WHERE userID='659605758501'"
ffrr
попробовал и так:
 sql = """UPDATE permissions SET deviceID='a4:3e:a0:b4:c6:ac' WHERE userID='659605758501'"""
cursor.execute(sql)
con.commit()

и так:
 cursor.execute("UPDATE permissions SET deviceID='a4:3e:a0:b4:c6:ac' WHERE userID='659605758501'")

в обоих случаях тишина - не изменяется значение deviceID в БД.
py.user.next
ffrr
в обоих случаях тишина - не изменяется значение deviceID в БД.
Выполни каждую строку как в консоли, так и в питоне
 SELECT * FROM permissions WHERE userID='659605758501';
 SELECT * FROM permissions WHERE userID=659605758501;
Убедись, что питон возвращает то же, что и консоль.
ffrr
В консоли эти 2 команды возвращают всю строку из БД. А питон возвращает:
   File "./auth.py", line 118
    cursor.execute("SELECT * FROM permissions WHERE userID='659605758501'")                 
                                                                                           ^
TabError: inconsistent use of tabs and spaces in indentation
и
   File "./auth.py", line 119
    cursor.execute("SELECT * FROM permissions WHERE userID=659605758501")                 
                                                                                         ^
TabError: inconsistent use of tabs and spaces in indentation
py.user.next
ffrr
В консоли эти 2 команды возвращают всю строку из БД.
Хорошо.

Теперь в питоне выполни
 SELECT * FROM permissions WHERE userID=659605758501;
Только запиши правильно. Очисти все пробелы в концах строк в коде.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB