根据:http://www.sqlite.org/draft/lang_keywords.html
如果你这样做,SQLite3将做你期望的事情:
select "foo" from bar;
但是,如果标识符不存在:
select "non-existant" from bar;
为了将引用的文本视为字符串,它会退回(为了与旧版本兼容).
这会给我带来问题,因为我使用这样的引用列动态创建查询,后一种行为返回无意义结果而不是抛出错误.
我正在编写python代码,并使用包装PEP-249 Python数据库API规范v2.0模块的模块,因此我可以在必要时放入数据库特定的hacks.
我们的后端数据库可能会发生变化(事实上,在某些时候本地测试和生产可能会有所不同),所以我希望尽可能保持SQL本身的标准.
我有什么方法可以:
>停止/关闭此行为
>轻松/可靠地检测到这种情况已发生(并提出我自己的例外,比如说)
>以某种方式解决这个问题(我不认为用非标准的等价物替换sql很容易以安全的方式编程)
解决方法:
如果列名称以表名或别名为前缀,则不能错误解释它们:
SELECT bar."foo", a."baz" FROM bar, blah AS a
处理多个表时,可能需要使用它来避免列名冲突.
原文地址:https://codeday.me/bug/20190629/1329266.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。