新手在这里。我想问一下这段代码可能有什么问题:
'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工作台
答案 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,)):
...