Python Sqlalchemy何时应该使用literal_列或代替bindparam?

Python Sqlalchemy何时应该使用literal_列或代替bindparam?,python,python-2.7,sqlalchemy,Python,Python 2.7,Sqlalchemy,从表面上看,似乎通常应该使用bindparam来消除SQL注入。但是,在什么情况下需要使用literal\u column而不是bindparam,以及应该采取什么措施来防止SQL注入?literal\u column也可以用作列的文字名称,而不是作为参数(即值),因为列名不能参数化(它是查询本身的一部分)。通常不应使用literal\u column在查询中输入值,而应仅使用列名。如果您接受用户输入的列名,则应将这些名称列为白名单 一个例外是,有时您想要输出一些SQLAlchemy不直接支持的

从表面上看,似乎通常应该使用
bindparam
来消除SQL注入。但是,在什么情况下需要使用
literal\u column
而不是
bindparam
,以及应该采取什么措施来防止SQL注入?

literal\u column
也可以用作列的文字名称,而不是作为参数(即值),因为列名不能参数化(它是查询本身的一部分)。通常不应使用
literal\u column
在查询中输入值,而应仅使用列名。如果您接受用户输入的列名,则应将这些名称列为白名单


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

literal\u column
也用于列的文字名称,而不是作为参数(值),因为列名无法参数化(它是查询本身的一部分)。通常不应使用
literal\u column
在查询中输入值,而应仅使用列名。如果您接受用户输入的列名,则应将这些名称列为白名单

一个例外是,有时您想要输出一些SQLAlchemy不直接支持的非常复杂的表达式,
literal\u column
基本上允许您在查询中放置自由格式的文本。在这些情况下,您应该确保用户提供的表达式部分(即值)仍然通过bind参数传递