将python变量插入SQlite数据库

时间:2017-09-16 02:41:55

标签: python mysql sqlite

我看过一些建议使用的帖子?将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()

1 个答案:

答案 0 :(得分:1)

您需要将参数作为元组传递给execute()。在你的情况下,你需要这样称呼它:

cursor.execute(query, (id, id))

其中query是您参数化的SQL查询字符串。

我假设您的代码在某处定义了id,否则execute()将尝试使用内置函数id()来构造查询,从而导致另一个错误。

值得一提的是,如果你只有一个参数,那么它也必须作为像(id,)这样的元组传递。避免常见的错误:(id)这不是一个元组。