pro*_*n11 2 ruby ruby-datamapper
我有一个类,它执行存储在YAML文件中的SQL语句(更新,插入和删除).我希望所有的陈述都是一次交易的一部分.如果任何SQL语句失败,那么它们将被回滚.如果所有语句都成功,那么它们将被提交.我正在连接MySQL数据库.这是我的代码:
require 'dm-core'
class SqlExecuter
def initialize(input_yaml_file_name)
@input_yaml_file_name = input_yaml_file_name
@adapter = DataMapper.repository(:default).adapter
@sql_statements = YAML::load(File.open(input_yaml_file_name))
end
def execute()
puts "Executing SQL statements in #{@input_yaml_file_name} file...."
@sql_statements.each do | sql_statement |
@adapter.execute(sql_statement)
end
end
end # class SqlExecuter
Run Code Online (Sandbox Code Playgroud)
我想让所有@ adapter.execute调用成为一个事务的一部分.我查看了dm-transactions gem中的代码,但我无法弄清楚如何在此上下文中使用它.
如果发生错误,请使用此方法在事务中体现SQL语句并回滚:
require 'dm-transactions'
YourModel.transaction do |t|
begin
@sql_statements.each do |sql_statement|
DataMapper.repository(:default).adapter.execute(sql_statement)
end
rescue DataObjects::Error
t.rollback
end
end
Run Code Online (Sandbox Code Playgroud)
看一下使用Ruby DataMapper和dm-transactions_spec.rb进行事务处理