代码之家  ›  专栏  ›  技术社区  ›  arbithero

在python中形成MySQL查询的正确方法是什么?

  •  1
  • arbithero  · 技术社区  · 14 年前

    我是python新手,我来自PHP之乡。我基于我的PHP知识在python中构造了这样一个SQL查询,得到了警告和错误

    cursor_.execute("update posts set comment_count = comment_count + "+str(cursor_.rowcount)+" where ID = " + str(postid))
    # rowcount here is int
    

    另外,如何转义字符串以形成SQL安全字符串?例如,如果我想转义-,',”等,我以前使用addslashes。我们用python怎么做?

    谢谢

    2 回复  |  直到 14 年前
        1
  •  3
  •   mike3996    14 年前

    首先,现在是学习使用Matus表示的方法将变量安全地传递给查询的时候了。更清楚,

    tuple = (foovar, barvar)
    cursor.execute("QUERY WHERE foo = ? AND bar = ?", tuple)
    

    如果只需要传递一个变量,则仍然必须将其设为元组:在末尾插入逗号,告诉Python将其视为一个元组: tuple = (onevar,)

    你的例子应该是:

    cursor_.execute("update posts set comment_count = comment_count + ? where id = ?",
                    (cursor_.rowcount, postid))
    

    命名参数 这样地:

    cursor_.execute("update posts set comment_count = comment_count + :count where id = :id",
                    {"count": cursor_.rowcount, "id": postid})
    

    "key": value .

        2
  •  2
  •   eumiro    14 年前

    来自python手册:

    t = (symbol,)
    
    c.execute( 'select * from stocks where symbol=?', t )