【问题标题】:How to set unique string primary key in flask-sqlalchemy for API endpoint如何在flask-sqlalchemy中为API端点设置唯一的字符串主键
【发布时间】:2017-08-27 10:29:51
【问题描述】:

我正在使用 Flask 和 Flask-SQLAlchemy 构建一个 Rest API。只是想知道,有什么方法可以生成唯一的 ID 字符串主键?此密钥将用于身份 API 端点,例如:

POST v0.2/users/4q2VolejRejNmGQB/messages

代替

POST v0.2/users/123/messages

我在玩http://hashids.org/,但似乎有问题,因为我保存数据后会自动生成主键,而哈希需要生成给定的整数

【问题讨论】:

  • 如何设置一个具有唯一约束的字段?
  • 使用 uuid 库
  • 知道了,我正在使用 uuid 和 base64 来生成友好的唯一 url。谢谢!

标签: python api flask flask-sqlalchemy


【解决方案1】:

我刚刚得到了解决方案。我正在使用 uuid 生成唯一的主键和 base64 以使其友好。

import re
import uuid
import base64

def uuid_url64():
    rv = base64.b64encode(uuid.uuid4().bytes).decode('utf-8')
    return re.sub(r'[\=\+\/]', lambda m: {'+': '-', '/': '_', '=': ''}[m.group(0)], rv)

这里是实现的例子

user1 = UserModel(user_id=str(uuid_url64()), name='rizkiaditya')

【讨论】:

  • 但是您还在 UserModel 声明中将 primary_key 属性设置为 True 吗?
  • 是的,因为 primary_key 应该是唯一的,UUID 可以处理。
  • 如果使用sqlalchemy_utils专用类型UUIDType,可以这样声明主键:uuid = Column(UUIDType, primary_key=True)
  • sqlalchemy_utils 有效,但如果您使用的是Flask-Migrate,则无法正确生成迁移版本。我不得不手动更改传递给UUIDType 的参数。
猜你喜欢
  • 2020-03-04
  • 2021-12-23
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
  • 2021-01-05
  • 2011-12-13
相关资源
最近更新 更多