Найти - Пользователи
Полная версия: импорт данных из HTML таблицы через lxml в MySQL
Начало » Python для новичков » импорт данных из HTML таблицы через lxml в MySQL
1 2 3 4
FishHook
ruff3d
sql='INSERT INTO T1(num, name, val, dom,kod,sin,rar)' VALUES (%s,%s,%s,%s,%s,%s,%s)'
Тут ошибка, обрати внимание на ковычки
FishHook
ruff3d
if i=7: i=0
Оператор присваивания в условии работать не будет
ruff3d
эти мелочи я уже сам увидел…
На такое у меня APTANA ругается)) так что на мелкие нюансы не стоит обращать внимание…

вы лучше скажите про лучший алгоритм разбора таблицы… чем мой…
PooH
Что-то из вашего кода не очень понятно что за преобразования вы пытаетесь с ячейками сделать, ну а в базу примерно так(создание курсора опустил), данные всей пачкой в базу
SQL = "INSERT INTO T1(num, name, val, dom, kod, sin, rar) VALUES (%s,%s,%s,%s,%s,%s,%s)"
data = []
for trs in doc.cssselect('table tr'):
    for tr in trs:
        data.append(tuple(x.text for x in tr.cssselect('td')))
cursor.executemany(sql, data)
построчно в базу
SQL = "INSERT INTO T1(num, name, val, dom, kod, sin, rar) VALUES (%s,%s,%s,%s,%s,%s,%s)"
for trs in doc.cssselect('table tr'):
    for tr in trs:
        cursor.execute(sql, tuple(x.text for x in tr.cssselect('td'))
ruff3d

вылазит ошибка типа…

cursor.execute(sql, tuple(x.text for x in tr.cssselect('td')))
File “e:\python27\lib\MySQLdb\cursors.py”, line 159, in execute
query = query % db.literal(args)
TypeError: not enough arguments for format string
PooH
ruff3d
вылазит ошибка типа…

cursor.execute(sql, tuple(x.text for x in tr.cssselect('td')))
File “e:\python27\lib\MySQLdb\cursors.py”, line 159, in execute
query = query % db.literal(args)
TypeError: not enough arguments for format string

Значит кол-во столбцов меньше чем полей в базе. Вы просили пример, я его вам дал. Прикручивайте сами, тем более что я ваших данных в глаза не видел.

PS: Момент, посмотрел еще раз ваш исходник, если это
for trs in doc.cssselect('table tr')
иттерация по строкам таблицы, тогда вот так
SQL = "INSERT INTO T1(num, name, val, dom, kod, sin, rar) VALUES (%s,%s,%s,%s,%s,%s,%s)"
for tr in doc.cssselect('table tr'):
     cursor.execute(sql, tuple(x.text for x in tr.cssselect('td')))
odnochlen
ruff3d
sql='INSERT INTO T1(num, name, val, dom,kod,sin,rar)' VALUES (%s,%s,%s,%s,%s,%s,%s)'
Скуля. Осиль параметризированные запросы.
ruff3d
все отлично… только строки в юникоде

('365', ‘2 (300), 21.04.08’, ‘01534’, u'\u041c\u0435\u0442\u0430\u043b\u0438 \u0442\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0456\u044f

как в кортеже это сразу исправить…?
odnochlen
А надо ли? Мускул юникод не принимает?
ruff3d
    cursor.execute(sql, tup)
  File "e:\python27\lib\MySQLdb\cursors.py", line 159, in execute
    query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
ERROR: Module: first could not be imported (file: E:\python\py2.7\first.py).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB