在将字符串参数传递到pd.read\u sql\u查询时,如何修复此错误?使用Python2.7
table = 'mytable1'
query = (
"SELECT * "
"FROM ? "
)
df = pd.read_sql_query(sql=query, con=conn, params=(table))
pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT * FROM ? ': near "?": syntax error
我尝试用%
和%s
替换?
,但返回相同的错误
以下等式示例按预期工作:
query = (
"SELECT * "
"FROM mytable1 "
"WHERE name = ? "
)
df = pd.read_sql_query(sql=query, con=conn, params=('cat',))
请注意,参数中的逗号似乎是必需的,否则将返回此错误:Incorrect number of bindings supplied. The current statement uses 1, and there are 7 supplied.
我也试过解决我的问题,但没有运气。我知道我也可以用"FROM '{t}' ").format(t=table)
来实现这一点,但我想了解如何使用Pandas的内置参数选项
问题在于
params
旨在替换值,而不是SQL关键字(来自,选择,等等…)或表或列不能这样指定表,必须使用字符串替换
但是,要非常非常小心。这样做,而不是使用params,会使您面临一系列非常大的漏洞,SQL Injections
如果从外部来源获取表名,则不要这样做。
(哦,这种限制的可能原因是,除了出于安全原因的绝对必要性外,参数化查询还允许数据库引擎检查查询、查看索引、统计数据以及所有这些,并制定“执行计划”。然后,连续调用可以重用该执行计划并仅替换新变量。如果查询在访问哪些表和列方面发生更改,则无法执行此操作。)
相关问题 更多 >
编程相关推荐