我有一個sql無數據轉儲,我需要通過它並替換每個創建表查詢的引擎部分。我在哪裏卡住的一點是,我需要在每個串我與替換爲相應的表用輸入+字符串中的信息替換所有正則表達式字符串
假設一個文件,如下
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)
我被困在如何讓每個表的表名到我替換的字符串。任何幫助表示讚賞。
如果你把整個文件看作一個字符串(如果它不是很大),我建議把'CREATE TABLE'和')ENGINE ='之間的所有子字符串都轉換成一些* table_block * s(你可以使用這個正則表達式 - CREATE \ s +表\ S + \'[^ \'] * \'\ S + \([^)] *(?:\)(?!\ S + ENGINE =)[^)])* \)\ S + ENGINE = *'([demo here](https://regex101.com/r/aF3iP6/1)),然後使用're.sub(r「\ bengine \ b。*」,「ENGINE-myreplacedstring-」 table_block)'。 –
我遇到的問題是將表名添加到每個表的myreplacedstring的末尾 – AdrianBR