Как из из бд удалить строку через pyqt
Допустим у меня есть QlineEdit и при нажатии кнопки я хочу удалять все строки которые с ним совпадают.
def delete(self):
self.connection = mysql.connector.connect(**dbconfig)
self.cursor = self.connection.cursor()
self.cursor.execute("CREATE DATABASE IF NOT EXISTS testdb")
self.cursor.execute("USE testdb")
self.cursor.execute("CREATE TABLE IF NOT EXISTS test (id INT PRIMARY KEY AUTO_INCREMENT, col2 VARCHAR(45))")
if self.lineEdit.text() != "":
text = self.lineEdit.text()
print(text)
self.cursor.execute("DELETE FROM test WHERE col2 = text")
print("success")
Появляется ошибка -1073740791 (0xC0000409), хотя согласно документации, sql запрос выполнен правильно. Предполагаю, что проблема может быть в разнице типов данных, но как исправить это не знаю.
Ответы (2 шт):
Вот этот код ошибки -1073740791 (0xC0000409) вообще не несёт полезной информации0, к сожалению.
Предположу, что в вашем случае это может быть ошибка в заросе удаления строк из таблицы.
Вы используете просто текст без кавычек. Текстовые значения в запросах должны бтаться в кавычки, в противном случае, БД будет пытаться сравнить колонку col2 с колонкой text (которого не существует в вашей таблице), вместо того чтобы искать строки значение в колонке col2 которых равняется слову text.
self.cursor.execute("DELETE FROM test WHERE col2 = text")
#--------------------------------------------------^^^^
#Должно быть так:
self.cursor.execute("DELETE FROM test WHERE col2 = 'text'")
В вашем же случае, как я понимаю, вы хотите удалить из таблицы БД строки значение col2 которых соответствует значению в переменной text. В этом случае, вам нужно писать так:
self.cursor.execute("DELETE FROM test WHERE col2 = %s", (text,))
И не забывайте делать self.connection.commit() после запросов вносящих изменения в БД, иначе эти изменения не будут применены.
Короче ответ оказался вообще не очевидным. Я и вправду забыл внести изменения через self.connection.commit(), но итоговая строка с запросом выглядит так.
self.cursor.execute("DELETE FROM test WHERE col2 = '{}'".format(text))
Я нигде не находил до этого такой синтаксис до этого. Из объяснения моего знакомого я мало что понял, однако это что-то в духе self.cursor.execute не имеет своего собственного форматирования, поэтому он воспринимает sql запрос и сравнение с параметром как 2 отдельных сообщения. Был бы признателен, если у кого есть литература почему так.