美好的一天。请帮我解决一个问题。
使用ORM时,我无法在线程中更新/读取数据。
我一直在使用peewee用于Python。阅读文档后,开始初始化对象以使用数据库。
db = SqliteDatabase('db.sqlite', threadlocals=True)
# Next comes the creation of tables and filling.
class Products(Model):
id = IntegerField(index=True, primary_key=True)
count_sales = IntegerField()
updated = IntegerField() # default to zero
class Meta:
database = db
db.connect()
db.create_tables([Products, ...]) # I have several tables
# I continue to fill the table with data from a file
然后我按如下方式创建预定数量的线程:
class MyThread(Thread):
tables = None
db = None
def run(self):
products_update(self.tables, self.db)
for _ in range(1, 20):
t = MyThread()
t.tables = (Products, ...)
t.db = db
t.start()
该函数计算字段count sales
中的记录数,并且它们是,它随机改变其中一个。
def products_update(tables, db):
Products, ... = tables
count = Products.select().where(Products.count_sales < 10, Products.updated == 0).limit(1).count()
if count:
row = Products.select().where(Products.count_sales < 10, Products.updated == 0).order_by(random()).limit(1).get()
Products.update(updated=1).where(Products.id == row.id).execute()
我需要让查找和更新的过程是线性的。
感谢您的关注。我为使用翻译的语言道歉。