我正在使用django网站,并且我正在尝试使用从旧数据库转储的数据为django创建YAML装置。我知道,我知道..但是我找不到任何能够帮助我快速完成这个任务的东西,所以我必须“自己动手” - 除非有更好的解决方案建议)。Python正则表达式匹配SQL INSERT语句
“滚动我自己的”解决方案的一部分是解析SQL语句 - 这些是自动生成的,因此语句的格式不会改变。
这里有两个样品INSERT
声明:
INSERT INTO ref_geographic_region (continent_id,name) VALUES(8,'Europe (Western)');
INSERT INTO ref_currency_group (name) VALUES('Major');
我想将SQL语句神交成以下模式:
INSERT INTO <table_name> VALUES (one_or_more_alphanums_separated_by_comma);
然后我需要符合以下值:
- table_name
- one_or_more_alphanums_separated_by_comma
这是我的正则表达式模式。它是匹配的,但分组不是我想要的。
pattern_string = r"INSERT INTO ([a-zA-Z\_]+)\s\(((([a-zA-Z\_]+)(\,)*)+)\)\s+VALUES\(([0-9]*)|([a-zA-Z\(\)']+)(\,)*\;"
如何修改(并简化)上面的模式,以便它只匹配我感兴趣的令牌?
这不是对问题的直接回答 - 而且您可能已经尝试过并发现它不足 - 但会将该SQL加载到数据库中,[在数据库上运行inspectdb以获取初始Django模型文件]( https://docs.djangoproject.com/en/1.11/howto/legacy-databases/),然后使用'dumpdata'把它变成灯具帮助? – bouteillebleu
考虑写一个解析器,而不是滥用正则表达式捕获组。我在这里回答了一个类似的问题:https://stackoverflow.com/questions/42435114/in-python-how-to-parse-a-string-representing-a-set-of-keyword-arguments-such-th/42437175 #42437175。如果这有帮助,那很好。如果没有,让我知道,我会看看我是否可以为你想要制作的语言打出语法。 – ymbirtt