【问题标题】:Python/MySQL: Escaping strings used as parameters in raw database queriesPython/MySQL:在原始数据库查询中用作参数的转义字符串
【发布时间】:2019-09-06 19:21:53
【问题描述】:

我正在使用连接/游标将数据从旧数据库/架构迁移到使用 Django 模型构建的新数据库/架构中。我遇到了带有撇号的名称的问题

简化

business = "Tom's Diner"
cursor.execute("select * from businesses where name = '" + business + "'") 

这显然会失败,因为我强制使用单引号会导致 SQL 语法问题。如果我这样做会起作用:

business = "Tom''s Diner"

但由于这是一个处理数百万行迁移的自动化过程。我正在寻找一种方法来逃避我的字符串 before 将其应用于直接 MySQL 查询。

我的问题:是我必须手动执行的操作,还是 Django/Python 中有一些函数可以转义字符串,并且可能会处理我还没有想到的情况,例如字符串中的双引号等。

【问题讨论】:

    标签: python django python-3.x


    【解决方案1】:

    试试这个:

    cursor.execute("select * from businesses where name = %s ", (business ,))
    

    确保第二个参数是一个元组:(business,) not (business)

    【讨论】:

    • 嗯,很有趣。会试试的。
    • +1,Postgres (psycopg) 的等效模块在其文档中强调您应该使用此方法而不是构建自己的查询字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多