Sqlalchemy何时应该使用literal_column而不是bindparam?

时间:2017-10-12 22:02:17

标签: python python-2.7 sqlalchemy

从表面上看,似乎bindparam通常应该用于消除SQL注入。但是,在什么情况下需要使用literal_column而不是bindparam - 以及应该采取哪些措施来阻止SQL注入?

1 个答案:

答案 0 :(得分:2)

literal_column旨在用作列的文字名称,而不是参数(这是一个值),因为列名不能参数化(它的一部分是查询本身)。您通常不应该使用literal_column在查询中添加,而只使用列名称。如果您接受列名称的用户输入,则应将这些名称列入白名单。

一个例外是有时你想输出一些SQLAlchemy不直接支持的非常复杂的表达式,而literal_column基本上允许你在表单中放入自由格式文本。在这些情况下,您应确保表达式(即值)的用户提供的部分仍然通过绑定参数传递。