Форум сайта python.su
0
Добрый вечер!
Написал скрипт, который парсит XML-файл, вытягивает оттуда нужные данные и заносит их в таблицу БД в виде SQL-запроса.
# -*- coding: utf8 -*- import MySQLdb import urllib2 import urlparse from xml.dom.minidom import parse def my_get(): url = open('D:\excel ver 3.xml') xml = parse(url) name = xml.getElementsByTagName('Workbook') for node in name: el = node.getElementsByTagName('Cell') title = [] sql_ = [] i = 0 j = 0 z = 0 zm = 0 while i < len(el): if (el[i].hasAttribute('ss:StyleID')) and (el[i].attributes['ss:StyleID'].value == "s274"): title.append(el[i].getElementsByTagName('Data')[0].firstChild.nodeValue) print title[j] j += 1 i += 1 print i print j print repr(title).decode("unicode_escape") con = MySQLdb.connect(host="localhost", user="root", passwd="vertrigo", db="moodle", use_unicode=True, charset='utf8') cur = con.cursor() while z < j: zm = z+1 sql_[z]="UPDATE mdl_course_sections SET name='"+title[z]+"' WHERE (course='12' AND section='1');" try: cur.execute(sql_[z]) except MySQLdb.DatabaseError, err: print u"Ошибка:", err else: print u"Запрос успешно выполнен" con.commit() z += 1 cur.close() con.close()
Офлайн
>>> L = [] >>> L[0] = 1 Traceback (most recent call last): File "<console>", line 1, in ? IndexError: list assignment index out of range >>>
Офлайн
0
Типа прога говорит, что массив title пустой? Но как так, если после выполнения цикла, я прошу вывести массив на экран и он его выводит!
Офлайн
У Вас пустой список sql_, на нем падает при попытке изменить в нем нулевой элемент.
Офлайн
0
А как тогда обойти данную ошибку?? Подскажите, пожалуйста, а то я не особо разбираюсь в python'е..
Офлайн
Юзайте метод append, имеющийся у списка, для добавления в него элемента.
Офлайн
0
Большое спасибо за помощь!)
Офлайн
0
Подскажите ещё, пожалуйста, кое-что!
Я хочу изменить запрос так, чтобы в условии WHERE (course='12' AND section='1') вместо section='1' он искал section равную значению элемента zm. Как это реализовать? А то на условие вида WHERE (course='12' AND section='“+zm+”') питон ругается следующим образом:
Traceback (most recent call last):
File “<pyshell#1>”, line 1, in <module>
my_parser4.my_get()
File “C:\Python26\my_parser4.py”, line 32, in my_get
sql_.append(“UPDATE mdl_course_sections SET name='”+title+“' WHERE (course='12' AND section='”+zm+“');”)
TypeError: coercing to Unicode: need string or buffer, int found
Офлайн
Вы пытаетесь склеить строки с типом int (zm), что в Питоне недопустимо. Раз Вы там все плюсуете, напишите unicode(zm) вместо zm.
Офлайн