gpt4 book ai didi

python - 在 Python 字符串中转义 %E

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:27 24 4
gpt4 key购买 nike

您好,我有一个用三引号引起来的查询

f_name = "'Pra_%'"
df = cp.sql("""SELECT first_name, last_name, FROM Students
WHERE first_name LIKE %s
AND last_name LIKE '%Elephant%'
""" % (f_name))

期望查询从 f_name 中选取值并替换 WHERE 子句中的 %s

收到以下错误:

TypeErrorTraceback (most recent call last)
<ipython-input-22-6544d0eca4d1> in <module>()
3 WHERE first_name LIKE %s
4 AND last_name LIKE '%Elephant%'
---> 5 """ % (f_name))

TypeError: not enough arguments for format string

我猜它正在将 %Elephant% 中的 %E 视为 Float 并期待一个参数。它在 WHERE 子句中没有第二个条件(AND last_name LIKE '%Elephant%')时起作用。

在这种情况下,我如何转义它才能使其正常工作?

最佳答案

保护自己免受 SQL injection 的侵害通过避免字符串格式化。到处使用参数化 sql:

import pandas.io.sql as psql
sql = """SELECT first_name, last_name, FROM Students
WHERE first_name LIKE %s
AND last_name LIKE %s"""
args = ('Pra_%', '%Elephant%')
df = psql.read_sql(sql, conn, params=args)

请注意,您不必双引号 'Pra_%'。数据库适配器将为您引用参数。所以使用参数化sql不仅更安全,也更容易。

关于python - 在 Python 字符串中转义 %E,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com