python mysql这是一个参数化语句?窒息特殊字符

时间:2014-02-06 11:29:13

标签: python mysql

试图了解如何获得某人所能做到的一切 输入(进入我的gui),进入我的数据库,我的搜索导致了很多信息 - 等;

“不要这样或那样 - 总是使用预备语句”

导致了; “Mysql使用wannabe准备好的语句,称为参数化语句”

所以我搜索了一下,但这些例子似乎就是我正在做的事情,即%s的东西。

我发现一条建议似乎是使用带有常规.format的花括号 字符串格式直接在mysql执行。 < -is这个好吗?

我发现了一个建议(许多人认为反对)使用re.sub。 < -i怀疑没有,但我把大部分股票放在SO的答案中

我发现建议使用“'%s'”代替'%s'< -tried this,它确实允许引号,但不允许反斜杠

允许插入任何可输入字符还需要什么。 反斜杠和引号是我所知道的,但我需要涵盖所有像@#$!〜%+(& ^。

参数化语句是否还有更多基本上意味着“根据您的需求自行处理应用程序代码”?即使是强烈的暗示,我也会感激不尽,我只是在圈子里读了18个小时。我需要一些方向。

cursor.execute ("""
        INSERT INTO dailylog 
        (emp, content, entrytime, shift, shiftday, containingweek)
        VALUES ('%s', '%s', '%s', '%s', '%s', '%s')
        """ % (emp, content1, entrytime, shift, shiftday, containingweek,));

cnx.commit()
cnx.close()

1 个答案:

答案 0 :(得分:1)

%替换(emp,之前的那个)。这就是它的工作方式。否则,你要求Python进行正常的字符串渲染。

另外,删除'周围的单引号。这是MySQL的转义代码,如果需要的话应该放在它们上面。

因此,具体而言,您的代码应如下所示:

cursor.execute ("""
        INSERT INTO dailylog 
        (emp, content, entrytime, shift, shiftday, containingweek)
        VALUES (%s, %s, %s, %s, %s, %s)
        """, (emp, content1, entrytime, shift, shiftday, containingweek))

PS:请注意,我在,之后删除了containingweek。出于语法原因,你需要在单元素元组中使用额外的逗号,但是这个元组包含多个元素......