小编asn*_*zin的帖子

如何在python2中获得反向枚举?

我有一个这样的结构列表:

[(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)

它运作得很好,但我只是担心它是否是一种正确的方法.可以有更好的解决方案吗?

python python-2.7

3
推荐指数
1
解决办法
1005
查看次数

每个 HTTP 方法的 Flask-RESTful 自定义路由

我有一个简单的 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)

python rest flask flask-restful

1
推荐指数
1
解决办法
1263
查看次数

为什么 select_for_update 在并发插入中有效?

我有一个代码,应该在并发请求和重负载下工作。

我写了一个例子来更好地理解我正在尝试做的事情:

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)

python sql django postgresql orm

0
推荐指数
1
解决办法
1704
查看次数

标签 统计

python ×3

django ×1

flask ×1

flask-restful ×1

orm ×1

postgresql ×1

python-2.7 ×1

rest ×1

sql ×1