使用python3.4.3,通过pip安装psycopg2
class I
{
// code to be filled in
.....
.....
.....
};
int main()
{
for(I i=0; i<10; i++){ // to make this for loop work, what needs to be written in the class above?
cout << " " << endl;
}
......
......
return 0;
}
给我这样的结果:
col = 'concept'
cur.execute("select regexp_split_to_array( %s ,';') from MyTable limit 200",(col,))
我的建议是(['concept'],)
生成如下的SQL查询:
psycopg2
所以我稍微改了一下代码,
SELECT
REGEXP_SPLIT_TO_ARRAY('concept',';')
FROM
MyTable
LIMIT 200
它可以工作,但字符串concat是UGLY并且在sql中经常是危险的。有没有更好的方法呢?
答案 0 :(得分:1)
不幸的是,你或多或少会自己创建这样一个SQL字符串,尽管使用字符串连接可能有更好的方法。
你是正确的,允许未经验证的用户输入作为SQL查询的一部分可能是危险的(搜索&#34; SQL注入&#34;找到丑陋的细节)。虽然可以使用通常称为"parameterized queries"的数据将数据值插入到SQL中,但遗憾的是,此技术不能与列名一起使用。原因有点复杂 - 参数化用于准备执行语句的优化版本,并允许变量列名称使优化无效。
然而,您可以使用Python的字符串格式化技术来创建语句,其中任何一个都比连接更漂亮。
"select regexp_split_to_array(%s ,';') from MyTable limit 200" % col
和
"select regexp_split_to_array({} ,';') from MyTable limit 200".format(col)
将创建您需要的语句。