2012-11-06 72 views
0

我想將sql查詢的所有列定義拆分爲單獨的字符串。SQL的拆分列定義創建表查詢

所以:

`citizen_group` int(10) NOT NULL, 
    `container_group` int(10) NOT NULL, 
    PRIMARY KEY (`citizen_group`,`container_group`), 
    KEY `fk_containergroup_readeraccess` (`container_group`) 

分爲:

['`citizen_group` int(10) NOT NULL', '`container_group` int(10) NOT NULL','PRIMARY KEY (`citizen_group`,`container_group`)',' KEY `fk_containergroup_readeraccess` (`container_group`)'] 

首先我用split(',')。但是,當sql有一個多列主鍵時,這會產生問題。我不能指望每個定義都在一個新的界限上,所以我不能在換行符上分割。

如何拆分這些列定義?

+1

你正在嘗試解析不是一個查詢(SELECT語句),但DDL(數據定義語言,所以CREATE TABLE語句),我認爲你應該改正你的問題的措詞 – piokuc

+0

我有完整的查詢,但我只對列定義感興趣。 – OrangeTux

+0

是的,這就是我要說的。 – piokuc

回答

0

這個解決方案有點怪異,我相信有更好的解決方案,但至少可以完成工作。

編輯:稍好代碼:

data = '''\ 
    `citizen_group` int(10) NOT NULL, 
    `container_group` int(10) NOT NULL, 
    PRIMARY KEY (`citizen_group`,`container_group`), 
    KEY `fk_containergroup_readeraccess` (`container_group`)''' 

data = data.replace('\n', '') 
last = 0 
result = [] 
paren = False 
for i, j in enumerate(data): 
    if j == '(': 
     paren = True 
    elif j == ')': 
     paren = False 
    if j == ',': 
     if not paren: 
      result.append(data[last:i]) 
      last = i + 1 
result.append(data[last:]) 
result = map(str.strip, result) 

print result 

結果

['`citizen_group` int10 NOT NULL', '`container_group` int(10) NOT NULL', 
'PRIMARY KEY (`citizen_group`,`container_group`)', 
'KEY `fk_containergroup_readeraccess` (`container_group`)']