拆分SQL创建表查询的列定义

时间:2012-11-06 15:31:52

标签: python 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 个答案:

答案 0 :(得分:0)

这个解决方案有点hacky,我确信有更好的解决方案,但至少它完成了工作。

编辑:更好的代码:

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`)']