Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 26, 2009 16:04:00

anyNeT
От:
Зарегистрирован: 2009-05-11
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

Привет всем. Пытаюсь распарсить sql-запрос:

INSERT INTO ‘table’ VALUES(231, ‘asda’, 923, ‘hello’, ‘asd’, 123, ‘one’)

В скобках VALUES() идут значения через запятую. Нужно получить только 5, 6 и 7 значения.

Пока вот что пришло в голву:

VALUES\({4}(+)\)

Но не работает. Буду благодарен, кто подскажет.



Офлайн

#2 Июнь 26, 2009 16:47:21

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

не совсем ответ, но есть же http://pypi.python.org/pypi/sqlparse/

Офлайн

#3 Июнь 26, 2009 17:40:59

anyNeT
От:
Зарегистрирован: 2009-05-11
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

Что-то интересное, но я не разобрался, как сделать нужное мне.



Офлайн

#4 Июнь 26, 2009 21:10:46

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

import re

query = "INSERT INTO 'table' VALUES(231, 'asda', 923, 'hello', 'asd', 123, 'one')"
part = re.findall("(?<=VALUES\().*(?=\))", query)
values = part[0].split(",")
print values



Офлайн

#5 Июнь 26, 2009 21:53:09

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

pasaranax
ты немного не понял , он показал что добавил в базу эти строчки и ему затем надо их вытинуть из БД, также у него может быть этих значений не известно сколько , а нужно только значение 5,6,7

Отредактировано (Июнь 26, 2009 21:56:09)

Офлайн

#6 Июнь 26, 2009 22:19:02

anyNeT
От:
Зарегистрирован: 2009-05-11
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

sypper-pit, нет, распарсить нужно именно cам sql-запрос.

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



Офлайн

#7 Июнь 27, 2009 00:16:27

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

import re

query = "INSERT INTO 'table' VALUES(231, 'asda', 923, 'hello', 'asd', 123, 'one')"
values = re.search("VALUES\((.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?)\)", query)
print values.groups()
Напечатает кортеж, но это только для случая с 7 параметрами, иначе части не выделить. Зато этот вариант будет быстрее первого, потому что нет просмотра назад и вперед.



Офлайн

#8 Июнь 27, 2009 14:01:10

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

тогда прошу прощения :) pasaranax

Офлайн

#9 Июнь 27, 2009 14:38:39

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

anyNeT
Пока вот что пришло в голву:
VALUES\({4}(+)\)
Но не работает. Буду благодарен, кто подскажет.
Так пойдет?
print re.match('VALUES\((?:([^,\s]+)[,\s]+){5}([^,\s]+)[,\s]+([^,\s]+)\)', "VALUES(231, 'asda', 923, 'hello', 'asd', 123, 'one')").groups()
("'asd'", '123', "'one'")



Офлайн

#10 Июнь 27, 2009 15:48:25

anyNeT
От:
Зарегистрирован: 2009-05-11
Сообщения: 39
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг SQL-запроса.

спасибо =)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version