繁体   English   中英

在MySQL中将驼峰表和列名转换为蛇形

[英]Convert camelcase table and column names to snake case in mysql

我试图谷歌搜索和堆栈溢出,但找不到答案,所以我想我会发布一个。

目前,我继承了一个遗留系统(PHP / MySQL),其中表名和列名都用驼峰式定义(即tableName,columnName)。 我想将此系统迁移到RoR,并希望将MySQL表也转换为蛇形格式(即table_name,column_name)。

如何有效地执行此操作,并且仍然成功迁移数据? 有人做过这个beofre吗?

您可以使用Rails数据库迁移来重命名表和列。

您可以创建一个迁移文件来重命名一个表,并创建另一个文件来重命名其列。

假设我们要重命名emailSubscriptions表。

> bundle exec rails generate migrations rename_email_subscriptions
# this creates db/migrate/xxxxxxxx_rename_email_subscriptions.rb

编辑迁移文件

# this creates db/migrate/xxxxxxxx_rename_email_subscriptions.rb

class RenameEmailSubscriptions < ActiveRecord::Migration
  def change
    rename_table :emailSubscriptions, :email_subscriptions
  end
end

对于列

> bundle exec rails generate migrations rename_email_subscriptions_columns
# this creates db/migrate/xxxxxxxx_rename_email_subscriptions_columns.rb

编辑迁移文件

# this creates db/migrate/xxxxxxxx_rename_email_subscriptions_columns.rb

class RenameEmailSubscriptionsColumns < ActiveRecord::Migration
  def change
    change_table :email_subscriptions do |t|
      t.rename :columnName1, :column_name_1
      t.rename :columnName2, :column_name_2
      t.rename :columnName3, :column_name_3
      t.rename :columnName4, :column_name_4
    end
  end
end

运行bundle exec rake db:migrate

对所有表及其对应的列执行此操作。

请注意,我决定拆分迁移以重命名表及其列,以便可以回滚迁移。

您可以在模型中覆盖表名:

class Project < ActiveRecord::Base
  self.table_name = "project"
end

要么

class Post < ActiveRecord::Base
  def self.table_name
    "special_" + super
  end
end

Post.table_name # => "special_posts"

更多信息: http : //guides.rubyonrails.org/3_2_release_notes.html

您还可以制作脚本并重命名表,然后再使用rails约定,这取决于您!

从那里,您可以使用Rails迁移来重命名列名: 如何在Ruby on Rails迁移中重命名数据库列?

暂无
暂无

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

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