草庐IT

TRANSACTIONS

全部标签

java - 我们如何让 JPA EntityManager Flush 工作

我的问题是为什么flush不起作用:publicvoidejbService(){Customerc=em.find(Customer.class,1);c.setName("newName");em.flush();//atthispointwhenIquerymysqltableIcannotsee"newName"thread.sleep(10000);c.setName("anotherName");}完成该方法后,我在数据库中看到“anotherName”我也用em.find(Customer.class,1,Lock.None);检查它但还是不行RGDS

java - JPA/@PostPersist @PostUpdate - 交易

我目前正在使用@PostPersist和@PostUpdate,在这些触发器中我正在持久化其他实体。问题是,这些触发器是否在同一事务中,如果不是,是否可以强制执行?对我来说,它是这样工作的。当我查看日志时,事务不存在(它是在触发器启动之前提交的)这阻止了我(在注入(inject)bean的持久方法上没有REQUIRES_NEW)将其他实体保存在数据库。REQUIRED属性被完全忽略,MANDATORY属性不抛出异常。这可能是JUnit的问题(因为我处于开发阶段并且没有在完整环境中测试行为。)?如果无法在此触发器上扩展事务,如何确保回滚发生在@PostPersist和@PostUpdat

python - 如何在 Django 中测试手动数据库事务代码?

我正在将数据从遗留系统传输到Django。为了确保当前数据库的完整性,我手动提交所有内容。但是,在编写单元测试时,事务不会正确回滚。由于TestCase可能正在使用事务,有没有什么方法可以正确测试依赖于事务的Django代码?@transaction.commit_manuallydefimport_records():#initialpreptry:import_data()exceptExceptionaserror:rollback=Trueexcept(KeyboardInterrupt,SystemExit):sys.stdout.write("Importcanceled\

python - Django 1.6 事务以避免竞争条件

我正在尝试使用Django1.6事务来避免我正在开发的游戏出现竞争条件。游戏服务器有一个简单的目标:将两名玩家配对。我目前的做法是:用户想玩服务器检查是否还有其他人在等着玩。如果没有,它会创建一个GameConnection对象(具有唯一标识符-uuid4)。如果存在,它获取GameConnection标识符并删除GameConnection。这是代码:#data['nickname']=user'schoicegames=GameConnection.objects.all()ifnotgames:game=GameConnection.objects.create(connecti

python - sqlalchemy、postgresql 和关系卡在 "idle in transaction"

我有一个与sqlalchemy和postgresql相关的问题。classProfile(Base):...roles=relationship('Role',secondary=role_profiles,backref='profiles',lazy='dynamic')运行时(current_user是Profile类的一个实例):roles=current_user.roles.filter().all()使用sqlalchemy我得到idleintransaction用于读取postgresql中的配置文件的所有选择。编辑:通过回显查询,我看到每个选择都以:BEGIN(imp

python - 在 django 中引发异常的 transaction.rollback() 的正确方法

我正在使用Django1.7.1和python2.7,我正在做一些需要在事务内的POST请求,实际上我正在使用@transaction.atomic()装饰器,它使整个函数都在事务中。据我所知,这个装饰器类似于commit_on_success并在出现数据库错误时进行回滚。是否可以引发自定义异常,使事务回滚但不使用保存点?我想在回滚完成时返回一个HttpResponse,解释事务未完成的原因。我有这个。@transaction.atomic()defsalida_de_almacen(request):ifrequest.method=='POST':try:folio=request

python - GAE/P : Transaction safety with API calls

假设您使用交易来处理Stripe付款并更新用户实体:@ndb.transactionaldefprocess_payment(user_key,amount):user=user_key.get()user.stripe_payment(amount)#APIcalltoStripeuser.balance+=amountuser.put()有可能StripeAPI调用成功但put由于争用而失败。然后将向用户收费,但他的帐户不会反射(reflect)付款。您可以将StripeAPI调用从交易中拉出,然后再进行交易,但您似乎仍然遇到同样的问题。扣款成功但交易失败,用户账户未入账。这似乎是

python - 将 transaction.commit_manually() 升级到 Django > 1.6

我继承了为Django1.4编写的应用程序的一些代码。我们需要更新代码库以使用Django1.7,并最终将1.8作为下一个长期支持版本。在一些地方它使用旧样式@transaction.commit_manually和withtransaction.commit_manually:我对事务的一般了解还不够,但我想了解它们的用途,所以我可以删除它们(如果不需要)或将它们升级到较新的set_autocommit(False)或等价物。我了解到Django数据库连接看起来是这样的,没有特殊的事务管理。(使用Postgres9.3)DATABASES={'default':{'ENGINE':'

python - Django 中的每 session 事务

我正在制作一个Django网络应用程序,它允许用户在一系列GET/POST上建立一组更改,然后再使用最终POST将它们提交到数据库(或恢复)。在确认更新之前,我必须将更新与任何并发数据库用户隔离开(这是一个配置前端),排除在每次POST之后提交。我的首选解决方案是使用每session事务。这保留了记住更改内容(以及它如何影响后续查询)以及在它所属的数据库中实现提交/回滚的所有问题。死锁和长锁不是问题,因为由于外部限制,任何时候只能有一个用户配置系统,他们表现良好。但是,我找不到有关设置Django的ORM以使用此类事务模型的文档。我拼凑了一个最小的猴子补丁(ew!)来解决这个问题,但不

python - 如何在不清除数据库的情况下测试 Django on_commit Hook ?

on_commit函数已添加到Django1.9,以便能够在当前事务提交后触发操作(例如Celery任务)。他们稍后提到inthedocs应该使用TransactionTestCase来测试依赖于该函数的特性。但是,与TestCase(使用事务并将其回滚)不同,TransactionTestCase在每次测试后清空整个数据库。不幸的是,我的数据迁移会在数据库中预加载一些有用的数据,这意味着在第一个测试清除数据库后,后续测试将不再有效。我最终通过模拟on_commit诉诸于一个卑鄙的把戏:withmock.patch.object(django.db.transaction,'on_co