无法安全执行

时间:2014-05-05 15:02:13

标签: python postgresql psycopg2

登录我的数据库后,我尝试执行安全的SQL命令。 我有一个为我准备SQL查询的方法。字符串本身和名为data的列表。

这就是我打算这样做的方式

s = SELECT %s FROM %s
    WHERE %s LIKE '%%%s%%' OR 
    %s LIKE '%%%s%%' OR 
    %s LIKE '%%%s%%' OR 
    %s LIKE '%%%s%%' OR 
    %s LIKE '%%%s%%' OR 
    %s LIKE '%%%s%%' OR 
    %s LIKE '%%%s%%' OR 
    %s LIKE '%%%s%%';

#list converted to tuple
data = ('*', 'studierende', 'vorname', u'jo', 'nachname', u'jo', 'adresse1', u'jo', 'adresse2', u'jo', 'stadt', u'jo', 'land', u'jo', 'email', u'jo', 'tel', u'jo')

cursor.execute(s, tuple(data))

我得到的错误是

ProgrammingError: syntax error at or near "'studierende'" LINE 1: SELECT '*' FROM 'studierende'

1 个答案:

答案 0 :(得分:0)

要传递标识符,请使用extensions module中的AsIs。其他参数需要adaptation

import psycopg2
from psycopg2.extensions import AsIs

query = """
    select %s
    from %s
    where %s like '%%' || %s || '%%'
;"""

data = (AsIs('*'), AsIs('studierende'), 'vorname', u'jo')
conn = psycopg2.connect("host=localhost4 port=5432 dbname=cpn")
cursor = conn.cursor()
cursor.execute(query, data)

必须将%字符加入参数值。