Хранить значения ключевых слов SQL в переменной - PullRequest
0 голосов
/ 04 декабря 2018

Как сохранить значения ключевого слова SQL в соответствующей переменной.

Пример SQL:

UPDATE dbname.tablename  
SET 
alias1=T1.col1,
alias2=T1.col2
FROM
(SELECT
T1.col_id,
T1.col_dt,
T1.col_ts
FROM 
dbname.tablename T1
WHERE 
T1.col_dt is NULL
AND T1.col_ts IS NOT NULL
AND
T1.col='ABC'
and  NOT EXISTS
(SELECT '1' FROM dbname.tablename T2
WHERE T2.col = 'ABC'
AND T1.col_id=T2.T1_col_id)
) T3
WHERE R.col_id=T3.col_id; 

Пример вывода:

updte=dbname.tablename
set=alias1=T1.col1,alias2=T1.col2
frm=(SELECT
T1.col_id,
T1.col_dt,
T1.col_ts
FROM 
dbname.tablename T1
WHERE 
T1.col_dt is NULL
AND T1.col_ts IS NOT NULL
AND
T1.col='ABC'
and  NOT EXISTS
(SELECT '1' FROM dbname.tablename T2
WHERE T2.col = 'ABC'
AND T1.col_id=T2.T1_col_id)
) T3
where=R.col_id=T3.col_id

Также есть способопределить все подзапросы и классифицировать их, если они являются частью предложения from или предложением where?

import sqlparse
query_tokens.tokens

Выше приведены значения, подобные приведенным ниже, но они не могут хранить значения для каждого ключевого слова, такого как update и остаток ключевого слова.

выход:

[<Newline ' ' at 0x385DA08>, <DML 'UPDATE' at 0x385DA68>, <Whitespace ' ' at 0x385DAC8>, <Identifier 'tablen...' at 0x385CDE0>, <Whitespace ' ' at 0x385DC48>, <Keyword 'set' at 0x385DCA8>, <Newline ' ' at 0x385DD08>, <IdentifierList 'TABLEN...' at 0x386B048>, <Newline ' ' at 0x3867228>, <Keyword 'FROM' at 0x3867288>, <Whitespace ' ' at 0x38672E8>, <Identifier 'tablen...' at 0x385CF48>, <Whitespace ' ' at 0x3867528>, <Where 'where ...' at 0x385CD68>]
...