Python / SQLITE:如何转义命令/字符串

时间:2012-01-02 04:12:21

标签: python string sqlite sql-injection

我想在python中构造一个sqlite3数据库查询,然后将其写入文件。

我是sthon数据库的python接口的忠实粉丝,AFAICT包装所有调用你可能会搞得一个不错的小'?'为您清理/转义字符串的参数,但这不是我想要的。我实际上只是想准备并转义一个sql语句 - 为此,我需要转义/引用任意字符串。

例如:

query = "INSERT INTO example_table VALUES ('%s')",sqlite_escape_string("'")

因此查询应包含: “INSERT INTO example_table VALUES('''')”

请注意,它会插入一个额外的'字符。

PHP的等价物是sqlite_escape_string() perl的等价物是DBI的引用() 我觉得Python有更好的整体界面,但我碰巧需要查询,pre-exec。

1 个答案:

答案 0 :(得分:0)

使用SQLite时,它不会将参数化查询转换回文本。它有一个api(“绑定”)并分别存储值。只需更改绑定即可使用不同的值重用查询。这是语句缓存的基础。因此,在执行您描述的内容时,您将无法获得python / sqlite的帮助。

你没有描述的是你想要这样做的原因。通常的原因是某种形式的追踪。我的备用Python / SQLite接口(APSW)提供了简单的跟踪 - 您甚至无需触摸代码即可使用它:

https://rogerbinns.github.io/apsw/execution.html#apsw-trace

SQLite还有一个授权程序API,允许您否决语句执行的操作。这也有一个副作用,告诉你声明最终会执行什么操作。