Найти - Пользователи
Полная версия: Парсинг SQL-запроса.
Начало » Базы данных » Парсинг SQL-запроса.
1 2
anyNeT
Привет всем. Пытаюсь распарсить sql-запрос:

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

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

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

VALUES\({4}(+)\)

Но не работает. Буду благодарен, кто подскажет.
slav0nic
не совсем ответ, но есть же http://pypi.python.org/pypi/sqlparse/
anyNeT
Что-то интересное, но я не разобрался, как сделать нужное мне.
pasaranax
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
sypper-pit
pasaranax
ты немного не понял , он показал что добавил в базу эти строчки и ему затем надо их вытинуть из БД, также у него может быть этих значений не известно сколько , а нужно только значение 5,6,7
anyNeT
sypper-pit, нет, распарсить нужно именно cам sql-запрос.

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

query = "INSERT INTO 'table' VALUES(231, 'asda', 923, 'hello', 'asd', 123, 'one')"
values = re.search("VALUES\((.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?)\)", query)
print values.groups()
Напечатает кортеж, но это только для случая с 7 параметрами, иначе части не выделить. Зато этот вариант будет быстрее первого, потому что нет просмотра назад и вперед.
sypper-pit
тогда прошу прощения :) pasaranax
Ed
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'")
anyNeT
спасибо =)
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