📅  最后修改于: 2023-12-03 15:19:42.028000             🧑  作者: Mango
在 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 语句,这可能会引起安全问题。