Python 使用参数保护用户输入的搜索值

Python 使用参数保护用户输入的搜索值,python,pandasql,Python,Pandasql,使用pandas和sqlite3后端,我能够使用param安全地提供用户提供的搜索值,ala: In [66]: df = pd.DataFrame({"x":range(10), "y":range(10)}) # db is an existing pandas sqlite3 connection In [67]: df.to_sql('df', rb.db) In [68]: pd.read_sql_query("""SELECT y FROM df WHERE x = ?""", rb

使用
pandas
sqlite3
后端,我能够使用
param
安全地提供用户提供的搜索值,ala:

In [66]: df = pd.DataFrame({"x":range(10), "y":range(10)})
# db is an existing pandas sqlite3 connection
In [67]: df.to_sql('df', rb.db)
In [68]: pd.read_sql_query("""SELECT y FROM df WHERE x = ?""", rb.db, params=(4,))
   y
0  4
Q:有没有一种方法可以直接在
DataFrame
上执行,而不将其转储到sqlite后端(无论是内存还是文件备份)?

类似于:

pandasql.sqldf("SELECT y FROM df WHERE x = ?", params=(4,), globals())
(这显然不起作用)。
pandasql.sqldf
中列出的参数没有包含任何明显的内容,因此我猜我必须(a)在内存缓存中创建一个临时sqlite3并对其进行查询,或者(b)冒SQL注入的风险,或者手动与之对抗。后者将使用类似于:

pandasql.sqldf("SELECT y FROM df WHERE x = {0}".format(*[ '"' + x + '"' for x in ['4'] ]), globals())
现在我正在动态创建“where”变量列表,因此尽管这里是
where x=?
,但通常是多个变量和/或一个变量的多个点击,例如
where x like?或者你喜欢什么?或z>?
。该字符串的创建是直接的,用于比较的值列表的创建也是同样“完成”的;令人烦恼的是使用用户提供的搜索值

与之不同的问题;因为我关心SQL注入,所以使用局部变量并不能解决问题