繁体   English   中英

如何用ruby修改.sql文件?

[英]how to modify .sql file with ruby?

我通过mysqldump命令生成了一个.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)....
.....
.....

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

您可以使用gsub ,并使用newlinetab和括号本身替换gsub括号。
您应该在写作之前或阅读时进行此操作

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)....

更新由于这是通过系统任务完成的,因此如果您将经常使用它,则可以在ruby控制台中执行此操作,也可以在某个地方编写辅助方法。

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

一次检查这个宝石,可能对您有帮助:

anbt-sql-formatter

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM