我正在使用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