使用LIKE(pyqt5)在mysql中选择语句

时间:2018-07-13 08:01:49

标签: python mysql pyqt5

新手在这里。我想问一下这段代码可能有什么问题:

'SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %' +self.le_ci_search.text()+ '%'

此行返回以下错误:

TypeError:需要一个类似字节的对象,而不是'tuple' 我正在尝试搜索其中有单词lopez的列名称。

更新#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()

我收到此错误:

  

回溯(最近通话最近一次):

     

文件“ /Users/anthonygaupo/Desktop/A3ASIS/A3A_Func.py”,第409行,在   客户搜索       如果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中       提高错误值

     

文件   “ /Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/cursors.py”,   第247行,执行       res = self._query(查询)

     

文件   “ /Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/cursors.py”,   _query中的第411行       rowcount = self._do_query(q)

     

文件   “ /Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/cursors.py”,   _do_query中的第374行       db.query(q)

     

文件   “ /Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/connections.py”,   第277行,在查询中       _mysql.connection.query(自己,查询)

     

TypeError:需要一个类似字节的对象,而不是'tuple'

我是MYSQL工作台

1 个答案:

答案 0 :(得分:2)

您需要将包括%字符在内的搜索文本用引号引起来。

但是您不应该这样做。在SQL语句之外组装值并使用参数替换:

query = '%{}%'.format(self.le_ci_search.text())
cursor.execute('SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %s', (query,))

修改

您正在创建一个元组,并将其作为查询传递给光标。我说要做的是创建一个字符串,并将其加上参数传递给光标:

cur = con.cursor()
query = 'SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %s'
if cur.execute(query, (search_text,)):
    ...