我通过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)....
.....
.....
有没有简单的方法来制作它?
答案 0 :(得分: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)....
<强>更新强> 由于这是通过系统任务完成的,因此您可以在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
答案 1 :(得分:0)
查看此宝石一次,可能对您有所帮助:
anbt-sql-formatter
答案 2 :(得分:0)
我找到了一种简单的方法。我们可以通过“sed”命令直接获取目标文件。
system "mysqldump -u#{USERNAME} --password=#{PASSPORT} --extended-insert #{DATABASE} #{table_name} | sed 's/),/),\\'$'\\n/g' > init_#{table_name}.sql"