我有一个这样的结构列表:
[(key1, val1), (key2, val2), ...]
Run Code Online (Sandbox Code Playgroud)
我想迭代它获取关键和每一步的项目索引.以相反的顺序.
现在我这样做:
for index, key in reversed(list(enumerate(map(lambda x: x[0], data)))):
print index, key
Run Code Online (Sandbox Code Playgroud)
它运作得很好,但我只是担心它是否是一种正确的方法.可以有更好的解决方案吗?
我有一个简单的 Resource 类,它定义了一些 API 方法:
class RoomAPI(Resource):
def get(self):
# some code
def post(self):
# some code
def put(self):
# some code
Run Code Online (Sandbox Code Playgroud)
然后我像这样定义我的路线:
api.add_resource(RoomAPI,'/api/rooms/')
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:如何仅使用一个 Resource 类为每个 HTTP 方法创建不同的路由?
我想获得这样的 API:
GET /api/rooms/get/
POST /api/rooms/create/
PUT /api/rooms/update/
Run Code Online (Sandbox Code Playgroud) 我有一个代码,应该在并发请求和重负载下工作。
我写了一个例子来更好地理解我正在尝试做的事情:
def add_tag():
with transaction.atomic():
image = Image.objects.get(pk=2)
tag = Tag.objects.get(pk=6)
image.tags.add(tag) # concurrent insert
return 'done'
class Command(BaseCommand):
def handle(self, *args, **options):
with ProcessPoolExecutor(max_workers=3) as executor:
futures = []
for _ in range(3):
futures.append(executor.submit(add_tag))
for future in as_completed(futures):
print(future.result())
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
class Image(models.Model):
title = models.CharField(max_length=255)
tags = models.ManyToManyField('ov_tags.Tag')
class Tag(models.Model):
title = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)
我正在尝试并行插入 ManyToMany 关系表。显然,由于 READ COMMITED 隔离级别的原因,这会导致错误:
django.db.utils.IntegrityError: duplicate key value violates unique constraint
Run Code Online (Sandbox Code Playgroud)
绝对没问题,但是如何彻底消除这个错误呢?
为了保护我的图像,我尝试在图像选择上使用 select_for_update 。
image = Image.objects.select_for_update().get(pk=2)
Run Code Online (Sandbox Code Playgroud)
而且...它有效!我运行了好几次。不再有错误并且项目插入正确。但我不知道为什么?
select_for_update 是否锁定关系表?或者它发生在应用程序端?有没有正确的方法来实现这种行为?
我可以使用空选择来锁定插入吗?
SELECT …Run Code Online (Sandbox Code Playgroud)