使用正则表达式解析SQL模式文件(python)

时间:2014-01-30 02:31:19

标签: python regex

我试图在这里找到合适的答案,但我很挣扎。

我有一个文件

create table "user".tablename 
  (
    columna char(4) not null ,
    columnb varchar(32),
    columnc varchar(16),
    updated datetime year to second 
        default current year to second not null ,
    edited_by varchar(18,10) 
        default current_user not null 
  );

create unique index "user".xpktablename on "user".tablename 
    (columna) using btree ;
alter table "user".tablename add constraint primary key 
    (columna) constraint "user".xpktablename  ;

现在我已经编写了python来确定它在文件中的位置(创建表,触发器,索引等)。但是,我无法弄清楚如何拔出列。

基本上,我正在尝试从架构转储中构建SQLAlchemy类:

所以,这将成为:

class tablename(Base):
    __tablename__ = 'tablename'

    columna = Column(String, primary_key = True)
    columnb = Column(String, nullable = True)
    columnc = Column(String, nullable = True)
    updated = Column(DateTime, nullable = False)
    edited_by = Column(String, nullable = False) 

    Index.....

如上所述,我现在不关心默认值 - 这是另一个值得单独问题的复杂性。

我无法得到的是用括号分析列线:varchar(xxx)

我一直在寻找([datetime year to second | integer | smallint]),但我不知道如何在查找(xxx)的文字括号内做一个subregex?

我猜这不是太复杂,我只是不太了解正则表达式。

任何帮助或推动正确的方向都将受到赞赏。

如果它有所帮助,那就是我现在正在尝试的工作:

column = re.search("^    ([a-zA-Z0-9_]{1,})\s([serial|integer|smallint|datetime year to second|date])")

0 个答案:

没有答案