1

我需要执行此查询以找出 MySQL 将用于特定表的下一个 auto_increment 值。

find_by_sql ["select auto_increment from information_schema.tables where   
table_schema = ? and table_name = ? and auto_increment is not null", db_name, tbl_name]

如何调用这个特定的查询?这适用于我调用它并返回包含模型对象的大小为 1 的数组的任何模型。编辑:该对象包含一个名为 attributes 的散列,其中包含所需的 auto_increment 值。

还有其他方法可以运行此类通用查询吗?想知道改变使用 find_by_sql 的整个方法是否也可以解决原始问题。

4

2 回答 2

6

如果您想在不涉及模型的情况下运行原始 SQL,您可以connection直接获取并调用其中一种select_*方法(select_value在本例中)。这些方法只是将 SQL 语句作为字符串,因此您可以调用sanitize_sql_array来转换您的参数数组(注意这sanitize_sql_array是受保护的,因此send可能需要)。

ActiveRecord::Base.connection.select_value(
  ActiveRecord::Base.send(:sanitize_sql_array, 
   ["select auto_increment from information_schema.tables where
    table_schema = ? and table_name = ? and auto_increment is not null", 
    db_name, tbl_name]))

返回的结果将是一个字符串。

于 2009-12-20T15:31:50.613 回答
0

因此,包含模型的一个对象的数组实际上是 ActiveRecord 试图将查询结果转换为对象。

查看该对象的#columns [edit: err "attributes"] 属性,并查看 ActiveRecord 将您要查找的结果放在哪里(我怀疑它会在名为 auto_increment 的列下)

于 2009-12-20T14:46:40.987 回答