2015-04-09 2 views
3

У меня есть простая таблицаВыполнить запрос в питоне

****************** 
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

Независимо от ответы ниже, форматирование SQL на стороне python является плохой практикой из-за SQL-инъекции. Посмотрите, как [официальные документы] (http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html) передают параметры в 'execute()' – Izkata

ответ

4

Ваша настоящая проблема здесь просто не помещает кавычки вокруг вашей вставленной строки. Как заметил Izkata, вы действительно не должны делать это на стороне Python из-за SQL-инъекции. Если бы эта SQL-сторона, весь ваш запрос должен быть в строчном формате при выполнении, поэтому вы должны использовать %s для каждого поля.

Ваша строка (вместо %d) будет преобразована в значение литерала SQL в любом случае при выполнении запроса.

В вашем случае, вы должны писать ваши вставки заявления, как это (как показано на docs):

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

Также вы хотите кавычки вашей строковое значение:

sql = "INSERT INTO Project.Movie(MId, Title) VALUES(%s, '%s')" % ('21','aman') 
Смежные вопросы