如何将用Ruby编写的MySQL查询转换为SQL?

时间:2014-02-04 12:13:19

标签: mysql ruby

如何将用Ruby编写的MySQL查询转换为SQL?

原因如下:

create_table "academic_details", :force => true do |t|
  t.integer "registration_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

我想要这样的事情:

CREATE TABLE IF NOT EXISTS `academic_details` (
  `registration_id` int(11) NOT NULL AUTO_INCREMENT,
  `created_at` DATETIME,
  `updated_at` DATETIME,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

3 个答案:

答案 0 :(得分:3)

运行rake db:structure:dump,所有表定义都将在db / structure.sql

中生成

答案 1 :(得分:0)

以下命令将帮助您:

rake db:structure:dump

这将在您的Rails应用程序的structure.sql文件夹中创建一个名为db的文件,其中包含您要查找的create table sql查询以及create index个查询

但是,我说主要是,因为您需要手动添加每个表的ENGINEDEFAULT CHARSETCOLLATION

有关rake命令的更多信息,请参见以下链接。在页面中搜索db:structure:dump

http://guides.rubyonrails.org/migrations.html

答案 2 :(得分:0)

我强烈建议您查看the Sequel gem。它是一个“ORM”,充当Ruby和任意数量的数据库之间的接口。

最大的好处是你可以轻松地在Sequel的DSL中编写查询,它将处理与特定DBM交谈的所有细节。如果您需要转换到其他供应商的数据库引擎,例如PostgreSQL,Oracle或SQLServer,那么转换连接字符串和构建表就很简单了。您根本不必重写任何查询。

特别是,它支持"migrations",这是一种增量定义数据库的简便方法。你的看起来像是:

Sequel.migration do
  up do
  create_table :academic_details |t|
    primary_key :id
    Integer :registration_id
    Datetime :created_at
    Datetime :updated_at
  end

  down do
    drop_table :academic_details
  end
end

阅读文档和README page。这是一个很棒的工具。