使用多个参数格式化字符串,以便 MySQL 可以处理它们 [英] Format string with multiple parameters so that MySQL can proces them

查看:35
本文介绍了使用多个参数格式化字符串,以便 MySQL 可以处理它们的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何格式化 API 返回的字符串,以便 Mysql 可以处理它.

I want to know how I can format a string that is returned by the API so that Mysql can process it.

这是我的 API 返回的字符串:bad_string = "History,Romance,Business & Money"

This is the string my API returns: bad_string = "History,Romance,Business & Money"

尝试 1:

cursor.execute("SELECT * FROM book WHERE scrape_category IN (%s) ORDER BY RAND() LIMIT 15", bad_string)

返回此消息:

Traceback (most recent call last):
  File "C:\PATH", line 23, in <module>
    cursor.execute("SELECT * FROM book WHERE scrape_category IN (%s) ORDER BY RAND() LIMIT 15", bad_string)
  File "C:\PATH\AppData\Roaming\Python\Python37\site-packages\mysql\connector\cursor_cext.py", line 259, in execute
    "Not all parameters were used in the SQL statement")
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

尝试 2:

bad_string_2 = "'Romance', 'History', 'Business & Money'"

cursor.execute("SELECT * FROM book WHERE scrape_category IN (%s) ORDER BY RAND() LIMIT 15", bad_string_2)

返回此消息:

Traceback (most recent call last):
  File "C:PATH", line 21, in <module>
    cursor.execute("SELECT * FROM book WHERE scrape_category IN (%s) ORDER BY RAND() LIMIT 15", bad_string_2)
  File "C:\PATH\AppData\Roaming\Python\Python37\site-packages\mysql\connector\cursor_cext.py", line 246, in execute
    prepared = self._cnx.prepare_for_mysql(params)
  File "C:\PATH\AppData\Roaming\Python\Python37\site-packages\mysql\connector\connection_cext.py", line 520, in prepare_for_mysql
    raise ValueError("Could not process parameters")
ValueError: Could not process parameters

这有效:

cursor.execute("SELECT * FROM book WHERE scrape_category IN ('Romance', 'History', 'Business & Money') ORDER BY RAND() LIMIT 15")

<小时>

当我这样做时查询有效:


The query works when i do this:

cursor.execute("SELECT * FROM book WHERE scrape_category IN ('Romance', 'History', 'Business & Money') ORDER BY RAND() LIMIT 15")

如何格式化字符串并使 MySQL 返回结果?

推荐答案

试试这样的:

filter ="History,Romance,Business & Money".split(',')
sqlcommand = "SELECT * FROM book WHERE scrape_category IN ({0})".format(
    ', '.join(['%s'] * len(filter)))
print(sqlcommand)
cursor.execute(sqlcommand, filter)

这篇关于使用多个参数格式化字符串,以便 MySQL 可以处理它们的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆