以下のsqlファイル(実際は10万行程あります)のCREATE TABLE
文を抜き出し、client_db_test_1050.sql
のような形でファイルを作成していく方法がありましたら、教えて頂きたいです
-- -- テーブルの構造 `client_db_test_1050` -- CREATE TABLE IF NOT EXISTS `client_db_test_1050` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '番号', `relation_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'testID', ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='test1' AUTO_INCREMENT=1020 ; -- -- テーブルの構造 `client_db_test_2010` -- CREATE TABLE IF NOT EXISTS `client_db_test_2010` ( `id` int NOT NULL COMMENT '番号', `relation_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'testID', ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='test2';
現状のコードは以下になります
path = './stage.sql' file_name = "client_db_test_1050.sql" with open(path) as f: print(f.read()) data_lines = f.read() data_lines = data_lines.replace("AUTO_INCREMENT", "") with open(file_name, mode="w",) as f: f.write(data_lines)
ご助言いただけましたら幸いです!
「行頭にCREATEがある行から、行頭に閉じ括弧がある行まで」を抽出するのか、SQLの文法解析を行ってCREATE文を抽出するのか、どういう方針でしょうか?
ご指摘ありがとうございます。
自分あまりPythonやSQLに詳しくなく方法に関しましては、良く分かっていない部分も多いのですが、現状ご提示頂きました「行頭にCREATEがある行から、行頭に閉じ括弧がある行まで」こちらの形で実装できたらなと考えております
「行頭が~~」で済むように書式が決まっているのであれば、正規表現が楽でしょうね。
あと、.replace("AUTO_INCREMENT", "") すると、AUTO_INCREMENT=1020 が、=1020 になって文法エラーですが、AUTO_INCREMENT=1020 をまるごと削除では?
ありがとうございます。
>.replace("AUTO_INCREMENT", "") すると、AUTO_INCREMENT=1020 が、=1020 になって文法エラーですが、AUTO_INCREMENT=1020 をまるごと削除では?
こちら、全くご指摘の通りでございます
実は、ここの部分も困っておりまして、カラム部分の「AUTO_INCREMENT」部分も削除したいのですが、「AUTO_INCREMENT=1020」ここの箇所も丸ごと削除したいと考えております。
また、「1020」ここの数字もCREATE文によっては異なる為、こちらの部分もどう対応を行うか検討中といった状況です...
回答2件
あなたの回答
tips
プレビュー