我有一张简单的表
******************
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
我刚刚传过数字,而不是引号,那么为什么会出错?
答案 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')