使用 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 中选择语句的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询语句中like 的用法

MySQL like 在啥情况下会走索引

在 MySQL 中使用 LIKE 命令给出奇怪的结果

MySQL中like使用 % 和 _ 的区别

在使用 LIKE 关键字时是不是可以在 MySQL 查询中使用 _ 作为普通字符 [重复]

在 mysql 中索引文本是不是可以改善使用 LIKE '%search%' 的搜索文本