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

Python和Sqlite3,连接传递的字符串,python,sqlite,Python,Sqlite,下面是对我的问题的概括 Col_Index = 'Foo' data = SQLfunctions.fetchSQL("SELECT Col_" + Col_Index + "FROM MyTable) 其中fetchSQL是一个返回SQL语句值的函数。我试图重新编写它,以便使用?传递列索引,并连接字符串,即 data = SQLfunctions.fetchSQL("SELECT Col_ || ? FROM MyTable", [Col_Index]) 但这不起作用,因为它似乎没有用?执

下面是对我的问题的概括

Col_Index = 'Foo'
data = SQLfunctions.fetchSQL("SELECT Col_" + Col_Index + "FROM MyTable)
其中
fetchSQL
是一个返回SQL语句值的函数。我试图重新编写它,以便使用
传递
列索引
,并连接字符串,即

data = SQLfunctions.fetchSQL("SELECT Col_ || ? FROM MyTable", [Col_Index])
但这不起作用,因为它似乎没有用
执行
|
(类似
列列列的错误不存在


如何更改此参数以使其工作?

您不能将SQL参数用于值以外的任何对象

您不能将它们用于表名、列、SQL函数或SQL语法的任何其他部分,正是因为它们是为防止这种使用而设计的

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

恐怕您一直在生成查询的这一部分

对用户提供的数据一定要非常小心,不要从外部来源获取
Col\u Index
,除非对其进行消毒和/或严格限制其可容纳的值的范围

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

from sqlalchemy.sql import table, literal_column, select

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

不能对值以外的任何对象使用SQL参数

您不能将它们用于表名、列、SQL函数或SQL语法的任何其他部分,正是因为它们是为防止这种使用而设计的

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

恐怕您一直在生成查询的这一部分

对用户提供的数据一定要非常小心,不要从外部来源获取
Col\u Index
,除非对其进行消毒和/或严格限制其可容纳的值的范围

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

from sqlalchemy.sql import table, literal_column, select

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