【发布时间】:2020-07-24 15:52:47
【问题描述】:
我正在尝试在 MySQL 数据库中的特定列中搜索包含字符串的行,例如如果我正在搜索的字符串是 ['bar', 'foo', 'dog', 'cat'],并且该列有句子,例如'This is a sentence' 我想挑出句子中存在匹配字符串的所有数据库行。因此,如果“这是一只猫”在我正在搜索的列中,则应该返回。
为此,我使用 sqlalchemy 进行查询,例如:
import pandas as pd
import sqlalchemy as sql
connect_string = 'some_db_address'
sql_engine = sql.create_engine(connect_string)
query = """SELECT * FROM database
WHERE column_name LIKE '%word1%'
AND column_name LIKE '%word2%' """
result = pd.read_sql_query(query, sql_engine)
这给了我一个ValueError: unsupported format character 'L' (0x4c) at index 87 错误 - 知道为什么会出现这种情况吗?
编辑:
我正在使用 python fstring 进行查询,例如:
query = f"""SELECT * FROM database
WHERE column_name LIKE '%{word1}%'
AND column_name LIKE '%{word2}%' """
result = pd.read_sql_query(query, sql_engine)
单词变量的数量发生变化,但在上面提出的示例中 word1 以“L”开头,因此出现错误消息
【问题讨论】:
-
什么是pd?你能分享更多上下文和堆栈跟踪吗?
-
添加更多代码,包括 word1 和 word2 的格式。
-
很难相信这里提供的代码会导致该错误,因为任何地方都没有
%L。该错误是 MySQL 驱动程序内部详细信息的结果,该驱动程序在转义任何参数后在内部使用 %-formatting。您是否在实际代码中使用某种形式的字符串格式来替换 word1 和 word2?如果是这样,那就是你的问题;您永远不应该以这种方式将参数传递给查询,而是使用驱动程序的占位符并传递参数以单独执行。 -
@lija 我已经更新了问题,我使用的是 python f 字符串,但不知道为什么会有所作为?
-
@merrydeath pd 是熊猫
标签: python mysql sql sqlalchemy