📜  rails 如何使用连接 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:19:42.028000             🧑  作者: Mango

Rails 如何使用连接 - Shell-Bash

在 Rails 中,连接 (connection) 就是一个用于与数据库通讯的对象。Rails 默认使用的是 ActiveRecord 做 ORM,连接对象是由它创建并维护的。通过连接对象,我们可以进行增删改查等多种操作。

连接配置

在 Rails 项目中,我们可以在 config/database.yml 中配置数据库连接信息。比如:

development:
  adapter: postgresql
  encoding: utf8
  database: blog_development
  username: myuser
  password: mypassword
  host: localhost
  port: 5432

上述配置表示我们在开发环境中使用的是 PostgreSQL 数据库,数据库名为 blog_development,用户名为 myuser,密码为 mypassword,连接的主机为 localhost,端口为 5432

其中,adapter 表示数据库类型,Rails 支持的数据库类型有:mysql2、postgresql、sqlite3、sqlite、oracle_enhanced、jdbc。

连接的建立和关闭

在 Rails 中,我们可以通过 ActiveRecord::Base.connection 获取当前应用程序的连接对象。我们可以在控制器、模型、甚至自定义任务中使用连接对象进行数据库操作。

不过需要注意,在 Rails 中,连接默认是自动建立和关闭的。当我们进行数据库操作时,连接对象自动建立,并在操作完成后自动关闭。这意味着我们不需要显式的去调用 connect 或者 close 方法。

如果我们想手动建立连接,可以使用 ActiveRecord::Base.establish_connection 方法:

ActiveRecord::Base.establish_connection(
  adapter: 'postgresql',
  database: 'blog_test'
)

如果手动建立连接成功后,连接对象会一直保持打开状态。当连接不再使用时,我们需要手动关闭它:

ActiveRecord::Base.connection.close
连接的事务

在 Rails 中,我们可以使用连接对象开启、提交或者回滚事务。比如:

ActiveRecord::Base.transaction do
  # 事务代码块
end

在这个代码块中,如果出现异常,事务会自动回滚。如果没有异常,则会提交事务。需要特别注意的是,在开启事务时,连接对象会自动建立。

连接的查询

在 Rails 中,我们可以使用连接对象进行多种查询操作,比如:

# 查询所有用户
users = ActiveRecord::Base.connection.execute('SELECT * FROM users')

# 查询所有用户名
usernames = ActiveRecord::Base.connection.execute('SELECT username FROM users').pluck('username')

# 插入一条数据
ActiveRecord::Base.connection.execute("INSERT INTO users (username, email) VALUES ('john', 'john@example.com')")

# 更新一条数据
ActiveRecord::Base.connection.execute("UPDATE users SET email = 'john@example.org' WHERE username = 'john'")

# 删除一条数据
ActiveRecord::Base.connection.execute("DELETE FROM users WHERE username = 'john'")

需要注意的是,在使用连接对象进行查询时,我们需要手动拼接 SQL 语句,这样会带来一定的安全风险。如果拼接 SQL 语句时出现错误,可能会导致严重的安全问题。

总结

本文介绍了在 Rails 中如何使用连接。我们可以配置连接信息,手动建立/关闭连接,开启/提交/回滚事务,进行任意 SQL 查询操作。需要注意的是,在查询操作中,我们需要手动拼接 SQL 语句,这可能会引起安全问题。