我在数据库中有一个表,用SQLAlchemy ORM模块映射(我有一个"scoped_session"变量)我想要我的程序的多个实例(不仅仅是线程,也来自几个服务器)才能在同一个表上工作而不是处理相同的数据.所以我编写了一个手动"行锁"机制,以确保在这个方法中处理每一行我在表上使用"完全锁定",而我"行锁定"它:
def instance:
s = scoped_session(sessionmaker(bind=engine)
engine.execute("LOCK TABLES my_data WRITE")
rows = s.query(Row_model).filter(Row_model.condition == 1).filter(Row_model.is_locked == 0).limit(10)
for row in rows:
row.is_locked = 1
row.lock_time = datetime.now()
s.commit()
engine.execute("UNLOCK TABLES")
for row in row:
manipulate_data(row)
row.is_locked = 0
s.commit()
for i in range(10):
t = threading.Thread(target=instance)
t.start()
Run Code Online (Sandbox Code Playgroud)
问题是,在运行某些实例时,多个线程正在崩溃并产生此错误(每个):
sqlalchemy.exc.DatabaseError :(由于Query-invoked autoflush引发;如果此刷新过早发生,请考虑使用session.no_autoflush块)(DatabaseError)1205(HY000):超出锁定等待超时; 尝试重新启动事务'UPDATE my_daya SET row_var = 1}
捕获量在哪里?是什么让我的数据库表没有成功解锁?
谢谢.
我有一个对象(基于myModel),我想根据形式(以创建myModelForm),我也希望该对象将涉及到该电源线 ForeignKey的对象(组),我想自己决定。(即不要”不希望它在形式中。
因此,如果我尝试使用form.save()会出现错误。有没有办法在使用save()之前添加 Group ForeignKey(在视图中)?
我的代码看起来像这样:
class myModel(models.Model):
myGroup = ForeignKey(Group)
normal_field1 = TextField()
...
normal_field2 = TextField()
class myModelForm(ModelForm):
class Meta:
model = myModel
fields = [normal_field1,noraml_field2]
Run Code Online (Sandbox Code Playgroud)
谢谢你
python ×2
django ×1
django-forms ×1
mysql ×1
python-3.x ×1
sqlalchemy ×1
system-paths ×1
tor ×1