在python中执行查询

在python中执行查询,python,mysql,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)

我有一张简单的桌子

******************
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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python2.7/dist packages/MySQLdb/cursors.py”,执行中的第159行
query=查询%db.literal(args)
类型错误:%d格式:需要数字,而不是str

我刚刚传递了数字,没有加引号,那么为什么会有错误呢?

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

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

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


您还需要在字符串值周围加引号:

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

不管下面的答案如何,由于SQL注入,在python端格式化SQL是一种不好的做法。查看将参数传递到
execute()
sql = "INSERT INTO Project.Movie(MId, Title) VALUES(%s, '%s')" % ('21','aman')