登录我的数据库后,我尝试执行安全的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'
答案 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)
必须将%
字符加入参数值。