2014-11-25 54 views
0

我产生由mysqldump的命令.sql文件:如何用ruby修改.sql文件?

system "mysqldump -u#{USERNAME} --password=#{PASSPORT} --extended-insert #{DATABASE} #{table_name} > init_#{table_name}.sql" 

的.sql文件看起来是这样的:

..... 
..... 
LOCK TABLES `config_products` WRITE; 
/*!40000 ALTER TABLE `config_products` DISABLE KEYS */; 
INSERT INTO `config_products` VALUES (1,1000,30,54),(2,2000,30,56),(3,3000,30,51),(4,1000,30,54).... 
..... 
..... 

所有数据合并成一条线,但我希望它看起来像它:

..... 
..... 
LOCK TABLES `config_products` WRITE; 
/*!40000 ALTER TABLE `config_products` DISABLE KEYS */; 
INSERT INTO `config_products` VALUES 
    (1,1000,30,54), 
    (2,2000,30,56), 
    (3,3000,30,51), 
    (4,1000,30,54).... 
..... 
..... 

有什么简单的方法可以做到吗?

回答

1

您可以使用gsub,并使用newline,一个tab和支架本身替换左括号。
你要么写之前或阅读

text = "INSERT INTO `config_products` VALUES (1,1000,30,54),(2,2000,30,56),(3,3000,30,51),(4,1000,30,54)...." 

newtext = text.gsub(/\(/,"\n\t(") 
#INSERT INTO `config_products` VALUES 
#  (1,1000,30,54), 
#  (2,2000,30,56), 
#  (3,3000,30,51), 
#  (4,1000,30,54).... 

UPDATE 由于这是一个系统的任务完成后,你可以做到这一点做到这一点,红宝石控制台,或者如果你的某个地方写一个辅助方法将会使用很多。

def export_formatted_sql(DATABASE,table_name,USERNAME,PASSWORD) 
    system "mysqldump -u#{USERNAME} --password=#{PASSPORT} --extended-insert #{DATABASE} #{table_name} > init_#{table_name}.sql" 
    file = File.open("init_#{table_name}.sql","r") 
    newtext = file.read.gsub(/\(/,"\n\t(") 
    file.close 
    file = File.open("init_#{table_name}.sql","w") # overwrite the existing file 
    file.write newtext 
    file.close 
end 
0

退房这种宝石一次,可能会对你有所帮助:

anbt-sql-formatter

0

我找到了一个简单的方法来做到这一点。我们可以通过“sed”命令直接获取目标文件。

system "mysqldump -u#{USERNAME} --password=#{PASSPORT} --extended-insert #{DATABASE} #{table_name} | sed 's/),/),\\'$'\\n/g' > init_#{table_name}.sql"