我正在使用Sequel访问MySql和SQL Server数据库。
Sequel允许我做这样的交易:
@client = Sequel.connect(config)
@client.transaction do
@client.execute("DELETE FROM UserGroup WHERE UserId = #{user_id}")
@client.execute("DELETE FROM User WHERE Id = #{user_id}")
end
因此,如果我的查询出现问题,交易将回滚,一切都会好的。
如果我的查询没问题,但是在提交时,数据库出现问题并且提交失败,Ruby代码是否会检测到并且也会失败?
答案 0 :(得分:1)
取决于数据库适配器的实现方式。它可能抛出异常,这与# Unregister the original Group admin.
admin.site.unregister(Group)
# Create a new Group admin.
class GroupAdmin(admin.ModelAdmin):
# Use our custom form.
form = GroupAdminForm
# Filter permissions horizontal as well.
filter_horizontal = ['permissions']
# Register the new Group ModelAdmin.
admin.site.register(Group, GroupAdmin)
不同。因此,它不会被Sequel::Rollback
方法捕获,并会冒泡到您的代码。
但通常情况下,在事务中的操作期间发生问题,而不是在COMMIT本身期间发生。通常你不应该担心它。