根据:http ://www.sqlite.org/draft/lang_keywords.html
如果你这样做,SQLite3 会做你所期望的:
select "foo" from bar;
但是,如果标识符不存在:
select "non-existant" from bar;
它回退(我猜是为了与旧版本兼容)将引用的文本视为字符串。
这给我带来了问题,因为我正在使用这样的带引号的列动态创建查询,而后一种行为会返回无意义的结果而不是引发错误。
我正在编写 python 代码,并使用一个包含 PEP-249 Python Database API Specification v2.0 模块的模块,因此我可以在必要时放入特定于数据库的 hack。
我们的后端数据库可能会改变(事实上,在某些时候本地测试和生产可能会有所不同),所以我想尽可能保持 SQL 本身的标准。
有什么办法可以:
- 停止/关闭此行为
- 轻松/可靠地检测到这已经发生(并提出我自己的异常,比如说)
- 以某种方式解决这个问题(我不认为用非标准等价物替换 sql 中的 " 很容易以安全的方式以编程方式完成)