Выберите оператор в mysql, используя LIKE (pyqt5)

Новичок здесь. 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'

Я - workbench MYSQL

-2
задан Anthony Gaupo 13 July 2018 в 08:38
поделиться

1 ответ

Вам нужно будет поместить текст поиска, включая символы%, в кавычки.

Но вы не должны этого делать. Соберите значение вне оператора 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,)):
    ...
2
ответ дан Daniel Roseman 17 August 2018 в 13:23
поделиться
  • 1
    Спасибо за ваш ответ. Я получаю эту ошибку: TypeError: необходим байтовый объект, а не 'tuple' Я попытался поместить str (запрос), но не работает – Anthony Gaupo 13 July 2018 в 08:19
  • 2
    Пожалуйста, отредактируйте свой вопрос с помощью точного кода, который вы попробовали, и полного отслеживания. Кроме того, какую клиентскую библиотеку MySQL вы используете? – Daniel Roseman 13 July 2018 в 08:23
  • 3
    уточните пожалуйста. Я уже редактировал его. Я использую mysql workbench – Anthony Gaupo 13 July 2018 в 08:26
  • 4
    Код, который вы указали, не даст этой ошибки. Но вы не указали ни полный код, ни полную трассировку. Кроме того, «рабочая среда mysql» это приложение, а не клиентская библиотека, которую вы используете в Python. – Daniel Roseman 13 July 2018 в 08:32
  • 5
    Прости. im, используя MySQLdb. Отредактировано снова выше. – Anthony Gaupo 13 July 2018 в 08:36
Другие вопросы по тегам:

Похожие вопросы: