2015-10-18 4 views
1

Я пытаюсь заполнить мою базу данных следующим скриптом, который не запускает запрос вообще, вместо этого он переходит прямо к исключению и выводит сообщение об ошибке. Можно ли определить проблему с помощью функции под названием insertGuest():заполнить базу данных скриптом python

for i in range (100): 
    addGuest = "INSERT INTO hotel_guests VALUES (\"%d\", \"%s\"%s \"%s\")", (int(i), "Name"+str(i),"gender"+str(i)) 
    try: 
     mycursor.execute(addGuest) 
     conn.commit() 
     print ("10000 Guests Successfully Inserted") 
    except: 
     conn.rollback() 
     print ("An error occurred") 

Я хотел бы также, как и данные, особенно имя будет иметь смысл, но если я могу на получить случайные строки, то, что просто нужно сделать.

Благодаря Летние

+1

Вы можете попробовать добавить 'traceback' файл' except' так что вы знаете, почему это дает вам ошибку. Кроме этого, это вопрос «Почему мой код не работает», который не относится к SO. – Leb

ответ

2

значения символов в SQL не в одинарных кавычках, цифры не процитировать. Форматирование строки Python по мере того, как вы пытаетесь, требует «%» между строкой и кортежем аргументов. Таким образом, вы бы что-то вроде этого: вместо

addGuest = "INSERT INTO hotel_guests VALUES (%d, '%s', '%s')" % (int(i), "Name"+str(i),"gender"+str(i)) 

Тем не менее, вы можете быть лучше с str.format() и именованными аргументами, для ясности. См. https://docs.python.org/2/library/string.html#format-string-syntax

Возможно, вы также захотите улучшить отчет об ошибках от except. Вы можете заменить его:

except mdb.Error as e: 
     conn.rollback() 
     print "Error %d: %s" % (e.args[0],e.args[1]) 

(Это предполагает, что вы импортировали MySQLDb с import MySQLdb as mdb, настроить имя mdb соответственно в противном случае.)

+0

Спасибо. Я пробовал это, но он по-прежнему не принимает запрос, вместо этого он запускает инструкцию ошибки. – summerdaiz

+1

Ах, я вижу. Он должен создать действующий SQL по крайней мере, так что могут быть другие факторы, такие как состояние курсора/соединения или что-то в таблице. По крайней мере, как предлагает @leb, вы должны получить дополнительную информацию из вашего «except», traceback или, по крайней мере, описания ошибки. –

+0

Я закончил с помощью цикла for и вынул try/except. Я новичок в программировании, поэтому я сделаю крошечные рабочие шаги. Кроме того, очевидно, что библиотека MySQLdb недоступна для моей версии. – summerdaiz

Смежные вопросы