使用 LIKE (pyqt5) 在 mysql 中选择语句
Posted
技术标签:
【中文标题】使用 LIKE (pyqt5) 在 mysql 中选择语句【英文标题】:Select statement in mysql using LIKE (pyqt5) 【发布时间】:2018-07-13 08:01:48 【问题描述】:这里是新手。我想问一下这段代码可能有什么问题:
'SELECT * FROM A3A_SIS.customer_info WHERE cust_name LIKE %' +self.le_ci_search.text()+ '%'
此行返回如下错误:
TypeError:需要一个类似字节的对象,而不是“元组” 我正在尝试搜索其中包含单词 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()
我收到了这个错误:
Traceback(最近一次调用最后一次):
文件“/Users/anthonygaupo/Desktop/A3ASIS/A3A_Func.py”,第 409 行,在 客户搜索 if 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 行,在默认错误处理程序中 提高错误值
文件 "/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", 第 411 行,在 _query 中 rowcount = self._do_query(q)
文件 "/Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/cursors.py", 第 374 行,在 _do_query db.query(q)
文件 “/Users/anthonygaupo/anaconda3/lib/python3.6/site-packages/MySQLdb/connections.py”, 第 277 行,查询中 _mysql.connection.query(self, query)
TypeError: 需要一个类似字节的对象,而不是“元组”
我是MYSQL工作台
【问题讨论】:
【参考方案1】:您需要将搜索文本(包括 % 字符)放在引号中。
但你不应该这样做。在 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,)):
...
【讨论】:
感谢您的回复。我收到此错误:TypeError: a bytes-like object is required, not 'tuple' 我试图放入 str(query) 但不起作用 请使用您尝试过的确切代码和完整的回溯编辑您的问题。另外,您使用的是哪个 MySQL 客户端库? 请检查先生。我已经编辑过了。我正在使用 mysql 工作台 您显示的代码不会给出该错误。但是您没有显示完整的代码或完整的回溯。另外,“mysql workbench”是一个应用程序,而不是您在 Python 中使用的客户端库。 对不起。我正在使用 MySQLdb。上面再次编辑。以上是关于使用 LIKE (pyqt5) 在 mysql 中选择语句的主要内容,如果未能解决你的问题,请参考以下文章