2015-11-21 3 views
0

У меня возникли трудности с оператором обновления для MySQL в Python. Я создал класс для выполнения запросов, все мои другие запросы работают, но обновление я мог бы использовать свежую пару глаз.Операция MySQL UPDATE Python

database_handler.sql_post_query_with_args_performed_successfully("UPDATE members SET email ='[email protected]' WHERE id= '%s'",id) 

Функция sql_post_query_with_args_performed_successfully возвращает истину, когда он выполняет запрос. Как она стоит этого код возвращает истину, но не обновляет поле коды таблицы для этого здесь: Защиту sql_post_query_with_args_performed_successfully (самость, запрос, арг): с UseDatabase (self.MYSQL_DETAILS) как курсор: попытки: курсора. выполнить (запрос, арг) возвращающие кроме mysql.connector.errors.IntegrityError: вернуть Ложные

эта функция использует «UseDatabase» другого класса whichs обрабатывает подключение и выполнение запросов, здесь ID код для этого:

import mysql.connector 

class UseDatabase: 
    def __init__(self, configuration:dict): 
     self.config = configuration 

    def __enter__(self) -> 'cursor': 
     """Connect to database and create a DB cursor. 

     Return the database cursor to the context manager. 
     """   
     self.conn = mysql.connector.connect(**self.config) 
     self.cursor = self.conn.cursor() 
     return self.cursor 

    def __exit__(self, exc_type, exc_value, exc_traceback): 
     self.cursor.close() 
     self.conn.commit() 
     self.conn.close() 
+0

'UPDATE members SET email ='[email protected] 'WHERE id =% s' Попробуйте удалить' '' – lad2025

+0

возможно commit или autocommit – Drew

+0

, когда я удаляю «Я получаю следующую ошибку: mysql.connector.errors .ProgrammingError: 1064 (42000): У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с «% s» по строке 1 –

ответ

-1

После долгих проб и ошибок я нашел ответ здесь: Python mysql.connector.errors. %s passed to SQL query with quotes

заявление существо :. "«WHERE ID = 'члены UPDATE SET email='[email protected] {0}'" формат (ID))

+0

Это не может быть правильный ответ. Этот кусок кода подпадает под SQL-инъекции и работает только потому, что id является целым числом. Как упоминалось в @ lad2025, вы должны использовать «WHERE id =% s», и ответственность за правильность цитирования литерального текста зависит от его типа. См. Http://www.mysqltutorial.org/python-mysql-update/ и http://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html для примера. , – newtover

+0

@newtover Извинения за задержку, Ive отработал это после прочтения вашего комментария и понял, моя функция запроса к базе данных искала кортеж с идентификатором, как вы можете видеть из моего ответа –

+0

Я рад, вам удалось найти решение.Лучше отредактировать старый неправильный ответ, чем добавить новый. Если новый ответ верен, люди, которые отказались от старого ответа, могут вернуть свои минусы. – newtover

0

После более рытье я понял, что мой SQL заявление должно быть: «члены UPDATE SET уточнена = 1 WHERE ID =% s»

Мой вызов функции требуется идентификатор будет принят в кортеже, как так : sql_post_query_with_args_performed_successfully ("UPDATE members SET email ='[email protected] 'WHERE id =% s", (id,))

Смежные вопросы