SQL nodata ダンプがあり、それを調べて、各テーブル作成クエリのエンジン部分を置き換える必要があります。私が立ち往生している点は、それぞれのテーブルで置き換えている各文字列のテーブル名に言及する必要があることです
以下のようなファイルを想定
CREATE TABLE `tablename1` (
-- #columns and keys
) ENGINE=InnoDB AUTO_INCREMENT=5075 DEFAULT CHARSET=utf8;
CREATE TABLE `tablename2` (
-- #columns and keys
) ENGINE=something AUTO_INCREMENT=55 DEFAULT CHARSET=latin1;
望ましい結果は次のとおりです。
CREATE TABLE `tablename1` (
-- #columns and keys
) ENGINE=-myreplacedstring/tablename1; -- #table name 1 is appended to this line
CREATE TABLE `tablename2` (
-- #columns and keys
) ENGINE=myreplacedstring/tablename2; -- #table name 2 is appended to this line
私は試した
fin = open('dump.sql','r')
filedata = fin.read()
fin.close()
newdata = re.sub('(?<=ENGINE).*;', '-myreplacedstring-', filedata)
fout = open('fed_dump.sql','w')
fout.write(newdata)
fout.close()
ただし、これは文字列がどのテーブルであるかに関係なく、文字列を固定文字列に置き換えるだけです。
また、渡すたびにテーブル名を取得できるように行ごとにアプローチしようとしましたが、これをどのように進めるかわかりません。
with open('dump.sql') as infile, open('dump_fed.sql', 'w') as outfile:
for line in infile:
#tablename= if line contains create table, update tablename, else do nothing
line = re.sub('(?<=ENGINE).*;', '-myreplacedstring-'+tablename, line)
outfile.write(line)
各テーブルのテーブル名を置換された文字列に取得する方法に行き詰まっています。どんな助けでも大歓迎です。