Skip to main content
 首页 » 编程设计

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

2025年05月04日22落叶

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

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不仅更安全,也更容易。