Python和Sqlite3,连接传递的字符串

时间:2014-02-06 15:21:32

标签: python sqlite

以下是我的问题的概括

Col_Index = 'Foo'
data = SQLfunctions.fetchSQL("SELECT Col_" + Col_Index + "FROM MyTable)

其中fetchSQL是一个返回SQL语句值的函数。我试图重写这个,以便使用Col_Index传递?并连接字符串,即。

data = SQLfunctions.fetchSQL("SELECT Col_ || ? FROM MyTable", [Col_Index])

但这不起作用,因为它似乎没有使用||执行?(类似column Col_ does not exist的错误)。

如何更改此功能以使其正常工作?

1 个答案:

答案 0 :(得分:4)

您不能将SQL参数用于除值之外的任何内容。

您不能将它们用于表名或列或SQL函数或SQL语法的任何其他部分,正是,因为它们旨在防止此类使用。

换句话说,如果SQL参数可以用于生成SQL代码(包括对象名称),那么它们对于它们的主要用途之一将是无用的:防止SQL注入攻击。

我很害怕你生成查询的那部分。

非常非常小心使用用户提供的数据,不要在不清理和/或严格限制其可容纳的值范围的情况下从外部源获取Col_Index

您可以查看SQLAlchemy为您生成SQL,因为它可以确保任何对象名称也被正确转义:

from sqlalchemy.sql import table, literal_column, select

tbl = table('MyTable')
column = literal_column('Col_' + Col_Index)
session.execute(select([column], '', [tbl]))