我正在构建一些依赖SQLite SQL语句的Python代码
很多
(我从单独的文件中读取)使用一些Python 3粘合代码。这意味着我有多页SQL模板,我在Python中提供参数,现在我想知道应该如何转义变量。
官方方式是:
c.execute("INSERT INTO foo VALUES (?, ?, ?)", (a, b, c))
,这对于小的SQL片段来说很可爱,但对于多页SQL语句来说有点不切实际(第35个问号又在哪里?)。
类似于
.format()
函数语法会更有用,例如:
c.executescript("... INSERT INTO foo VALUES ({a}, {b}, {c}); ...".format(a='a', b='b', c="Robert'); DROP TABLE foo; --", ...)
实际的SQL模板字符串将从文件中读取,并作为变量放置,因此
c.executescript(fp.read().format(a='a', b='b', c="Robert'); DROP TABLE foo; --", ...)
. 最终结果是
params={'a':'a', 'b':'b', 'c': "Robert'); DROP TABLE foo; --"}, c.executemany(fp.read().format(**params))
这可能吗?