【问题标题】:python sqlite3 Double quotes resulting query failurepython sqlite3 双引号导致查询失败
【发布时间】:2013-08-04 21:57:07
【问题描述】:

我有一个 Sqlite3 表 粘贴{ paste_id 整数, 粘贴内容文本 }

我必须做一个更新语句,其中文本可能包含单引号 ' 以及 "" 双引号。 在python中我写了

UPDATE_Statement = "Update paste set paste_content = '%s' where paste_id=id" %(content)

但由于内容可以包含 ' 或 "" ,我的执行查询无法正常工作。 我怎样才能正确地逃避这个?

【问题讨论】:

    标签: python database django sqlite


    【解决方案1】:

    使用字符串插值。改用 SQL 参数:

    UPDATE_Statement = "Update paste set paste_content = %s where paste_id=%s"
    
    cursor.execute(UPDATE_Statement, content)
    

    并将转义(和正确的引用)留给数据库适配器。这个:

    • 简化您的代码
    • 正确引用不同的数据类型
    • 让数据库对不同的数据重复使用查询计划
    • 防止 SQL 注入攻击

    请参阅 Django SQL 文档中的 Passing parameters into raw()

    如果您使用不同的数据库连接器(不是 Django 提供的连接),请验证文档中参数占位符的特定样式。例如,sqlite3 数据库适配器使用 ? 作为占位符语法。

    【讨论】:

    • 当我有更多的参数,比如 content1,content 2 时,我该怎么写?
    • 所有参数都是位置的;每个参数使用一个%s,并将值作为第二个参数(列表、元组等)中的序列传递。
    • UPDATE_Statement = "Update paste set paste_content = %s content2= %s where paste_id=%d" cursor.execute(UPDATE_Statement, (content1,content2,id)) 上面的语句又给了我错误。
    • Django 仅支持%s,不支持%d,用于参数。但是,SyntaxError 异常通常表明您在某处做错了else,但没有完整的回溯,很难准确判断可能是什么。
    • 此外,SQL UPDATE 语句在列之间使用逗号。 UPDATE_Statement = "Update paste set paste_content = %s, content2= %s where paste_id=%d"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    相关资源
    最近更新 更多