使用“加载数据文件”时的参数查询 更新

为了安全起见,我使用参数查询进行普通的插入/更新。
对于这样的查询,我该怎么做:

LOAD DATA INFILE '/filepath' INTO TABLE mytable   

就我而言,文件路径每次都会有所不同(针对不同的请求)。这样进行是否可以(因为我没有从外部获取任何数据,所以文件来自服务器本身):

 path = /filepath
 "LOAD DATA INFILE" + path + "INTO TABLE mytable"
footballfl1987 回答:使用“加载数据文件”时的参数查询 更新

由于SQL Syntax Allowed in Prepared Statements中未列出LOAD DATA,因此您无法准备类似的东西

LOAD DATA INFILE ? INTO TABLE mytable

但是列出了SET。因此,解决方法可能是准备并执行

SET @filepath = ?

然后执行

LOAD DATA INFILE @filepath INTO TABLE mytable

更新

在具有MySQLdb的Python中,以下查询应正常工作

LOAD DATA INFILE %s INTO TABLE mytable

因为没有使用准备好的语句。

,

要回答“是否可以像这样进行”这样的问题,您的示例代码将失败,因为结果查询将缺少文件名周围的引号。如果将其更改为以下内容,则可以运行,但是IMO仍然不是一个好主意:

 path = "/filepath"
 sql = "LOAD DATA INFILE '" + path + "' INTO TABLE mytable" # note the single quotes

尽管您今天可能不接受外部输入,但是代码可以保留并重复使用/复制,因此您应该以可以转义参数的方式使用API​​:

sql = "LOAD DATA INFILE %s INTO TABLE mytable"
cursor.execute(sql,(path,))

如果未启用自动提交功能,请不要忘记提交。

本文链接:https://www.f2er.com/2704816.html

大家都在问