在python中执行查询

时间:2015-04-09 18:57:42

标签: python mysql

我有一张简单的表

******************
MId  |  Title
1    |  pqr
2    |  abc
******************

现在我编写的用于将数据附加到表的代码是

 import MySQLdb
 db = MySQLdb.connect("localhost", "root", "a", "Project")
 cursor = db.cursor()
 sql = "INSERT INTO Project.Movie(MId, Title) VALUES(%d, %s)" % (21,'aman') 
 cursor.execute(sql)

但上面的代码会生成错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute
    query = query % db.literal(args)
TypeError: %d format: a number is required, not str

我刚刚传过数字,而不是引号,那么为什么会出错?

2 个答案:

答案 0 :(得分:4)

这里真正的问题很简单,就是不要在插入的字符串周围添加引号。正如Izkata所说,由于SQL注入,你真的不应该在Python方面这样做。 如果是SQL端,则整个查询在执行时必须采用字符串格式,因此必须对每个字段使用%s

在执行查询时,您的字符串(而不是%d将在任何情况下转换为SQL文字值。

在您的情况下,您应该像这样编写插入语句(如docs中所示):

sql = (
  "INSERT INTO Project.Movie (MId, Title) "
  "VALUES (%s, %s)"
)
data = (21,'aman')
cursor.execute(sql, data)

答案 1 :(得分:2)

您还需要围绕字符串值的引号:

sql = "INSERT INTO Project.Movie(MId, Title) VALUES(%s, '%s')" % ('21','aman')