【问题标题】:Generate SQL queries with Ruby使用 Ruby 生成 SQL 查询
【发布时间】:2011-08-17 22:08:06
【问题描述】:

我想要一种在 Ruby 中生成 SQL 查询的简单方法。我对 ActiveRecord、Sequel 和 DataMapper 了如指掌。我不是在寻找 ORM,而只是在寻找一种更简单的方法来生成 SQL 语句字符串。

我正在使用 RBHive 运行 Hive 查询,并且想要一种简单的方法来生成 Hive 查询语句。

这肯定存在(AR 等),我查看了Arel,这似乎很有希望。但无法弄清楚如何从流行的 ORM 库中剥离 SQL 语句生成部分。一切都需要连接到数据库服务器。

目前我只使用原始 SQL 字符串,但我想摆脱这种情况,因为查询变得越来越复杂且容易出错。

有什么想法吗?

【问题讨论】:

    标签: sql ruby hive


    【解决方案1】:

    你说

    一切都需要连接到数据库服务器。

    我认为,至少对于 Sequel,您可以使用虚拟数据库:

    require 'sequel'
    DB = Sequel::Database.new() #-> <Sequel::Database: >
    puts DB[:test].sql          #-> SELECT * FROM "TEST"
    

    【讨论】:

    • 适用于查询,对于 INSERT 和 UPDATE,使用 insert_sql() 和 update_sql() 而不是 insert() 和 update()。如果您像我一样讨厌“QUOTED_SHOUTY_IDENTIFIERS”,以下构造函数参数也很有用:Sequel::Database.new(quote_identifiers: false, identifier_input_method: nil)
    • 来自未来的任何想要小写标识符的人都应该改用DB = Sequel::Database.new; DB.extension :identifier_mangling; DB.identifier_input_method = nil; DB.identifier_output_method = nil
    【解决方案2】:

    你说得对,你在找 Arel,它是用来为 SQL 语句构建 AST 的,不需要数据库连接。

    不过,它的语法与您习惯看到的完全不同。所以要注意。

    阅读此处的自述文件,看看它是否对您有意义:

    https://github.com/rails/arel

    【讨论】:

    • 我认为 Arel 看起来不错。最后,我只是为 Sequel 中的 Hive 制作了一个适配器。不需要学习其他语法!
    猜你喜欢
    • 2010-10-17
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多