【问题标题】:how to modify .sql file with ruby?如何用 ruby​​ 修改 .sql 文件?
【发布时间】:2014-11-25 05:11:06
【问题描述】:

我通过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)....
.....
.....

有什么简单的方法吗?

【问题讨论】:

    标签: mysql sql ruby-on-rails ruby


    【解决方案1】:

    您可以使用gsub,并使用newlinetab 和括号本身替换左括号。
    您应该在写作之前或阅读时这样做

    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
    

    【讨论】:

      【解决方案2】:

      查看此 gem 一次,可能对您有所帮助:

      anbt-sql-formatter

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-02
          • 1970-01-01
          • 1970-01-01
          • 2016-10-30
          相关资源
          最近更新 更多