Новичок здесь. Id хотел бы спросить Что может быть неправильно с этим кодом:
'SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %' +self.le_ci_search.text()+ '%'
Эта строка возвращает ошибку:
TypeError: необходим байтовый объект, а не 'tuple «Я пытаюсь найти имя столбца, где в нем слово lopez.
UPDATE # 1:
Я использую этот код, как было предложено:
def CustSearch(self):
search_text = '%{}%'.format(self.le_ci_search.text())
con = mdb.connect(user='root', passwd='password',
host='localhost', database='A3A_SIS')
with con:
cur = con.cursor()
query = ('SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %s', (search_text))
if cur.execute(query):
QMessageBox.information(self, "Announcement.","Data was found!")
else:
QMessageBox.information(self, "Announcement.","No data was found!")
con.close()
Я получил эту ошибку:
Traceback (последний последний вызов):
Файл «/Users/anthonygaupo/Desktop/A3ASIS/A3A_Func.py», строка 409, в CustSearch, если cur.execute (query):
Файл «/Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/cursors.py», строка 250, в исполнении self.errorhandler (self, exc, value)
Файл «/Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/connections.py», строка 50, в defaulterrorhandler raise errorvalue
Файл «/ Пользователи / anthonygaupo / anaconda3 / lib / python3.6 / site-packages / MySQLdb / cursors.py ", строка 247, в execute res = self._query (query)
Файл" /Users/anthonygaupo/anaconda3/lib/python3.6/ site-packages / MySQLdb / cursors.py ", строка 411, в _query rowcount = self._do_query (q)
Файл" /Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/ MySQLdb / cursors.py ", строка 374, в _do_query db.query (q)
Файл" / Пользователи / a nthonygaupo / anaconda3 / lib / python3.6 / site-packages / MySQLdb / connections.py ", строка 277, в запросе _mysql.connection.query (self, query)
TypeError: байтоподобный объект требуется, а не 'tuple'
blockquote>Я - workbench MYSQL
Вам нужно будет поместить текст поиска, включая символы%, в кавычки.
Но вы не должны этого делать. Соберите значение вне оператора SQL и используйте замену параметров:
query = '%{}%'.format(self.le_ci_search.text())
cursor.execute('SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %s', (query,))
Edit
Вы создаете один кортеж и передаете его курсору в качестве запроса. То, что я сказал сделать, это создать строку и передать это плюс параметр курсору:
cur = con.cursor()
query = 'SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %s'
if cur.execute(query, (search_text,)):
...