我看过一些建议使用的帖子?将python变量插入SQL查询时作为占位符,但所有这些示例都在查询结尾处显示问号,后跟python变量。如果要在查询中插入python变量并希望避免SQL注入,该怎么办?我使用的是Python 3.6和SQLite。
更新* - 此代码正常运行: ID =#39&; 13' 文本=' YES'
db=sqlite3.connect('NEW_Inventory.sqlite')
cursor=db.cursor()
query=('''
INSERT
OR REPLACE
INTO
text (id, text)
VALUES
(?,
(SELECT
CASE
WHEN exists(SELECT 1 FROM text WHERE id=?)
THEN 'good'
ELSE 'Hello'
END
)
)''')
cursor.execute(query, (id, id))
db.commit()
答案 0 :(得分:1)
您需要将参数作为元组传递给execute()
。在你的情况下,你需要这样称呼它:
cursor.execute(query, (id, id))
其中query
是您参数化的SQL查询字符串。
我假设您的代码在某处定义了id
,否则execute()
将尝试使用内置函数id()
来构造查询,从而导致另一个错误。
值得一提的是,如果你只有一个参数,那么它也必须作为像(id,)
这样的元组传递。避免常见的错误:(id)
这不是一个元组。