3

我的应用程序出于多种原因必须与多个数据库一起使用。我致力于建立数据库连接的自定义模型,我需要基于 arg 建立新的数据库连接,. 因此,例如,在使用以下命令建立新连接之前:

ActiveRecord::Base.establish_connection new_config 

new_configdatabase.yml 的自定义克隆在哪里

我想在建立任何数据库连接之前检查是否存在新数据库。所以我需要一个函数db_exists? db_name来返回布尔值,基于 db 是否存在。

4

2 回答 2

2

在没有连接到该数据库的情况下能够检查数据库是否存在似乎有点不合逻辑,但这可能只是我。

我建议您考虑使用救援块来尝试连接,然后处理适当的异常。

此处讨论了您可以从该尝试中收到的异常。

刚刚在这里遇到了关于使用救援的非常好的讨论。

于 2013-09-21T09:36:27.133 回答
1

我们使用 Rails 应用程序自己管理数据库,所以必须一直做这样的事情。除了当前的 Rails 数据存储之外,想了解数据库是完全合理的。这很像检查不属于当前 Rails 应用程序的文件是否存在。

这是一个在某些情况下可能有用的解决方案(这适用于 MySQL):

def db_exists?(db_name)
  ActiveRecord::Base.connection.execute("SHOW DATABASES LIKE '#{db_name}'").size > 0
end

你必须有一些数据库连接,但它当然不一定是你要查询的数据库。(请注意,此实现不受 sql 注入保护......它只需要您传入干净、有效的 db_name。)

于 2014-04-17T22:19:00.477 回答