【发布时间】:2020-07-05 04:49:16
【问题描述】:
我正在使用b64encode 从表中每一行的主键创建一个唯一的引用字符串。这是我在 Flask SQLAlchemy 中的模型:
class Groups(db.Model):
id = db.Column(db.Integer, primary_key = True)
ref_id = db.Column(db.String(20), index = True)
def __init__(self):
self.ref_id = id_encode(self.id)
但是,传递给id_encode() 函数的self.id 具有“无”值,而不是主键的值。据我所知,只有在提交会话后才能获得新的主键值,或者通过using the flush() method。
这是id_encode()的定义:
def id_encode(num):
bts = base64.b64encode(bytes(str(num), 'utf-8'))
print(num)
return bts.decode()
如果有什么方法可以让它工作,或者有什么更好(但简单)的方法来生成唯一参考 ID?我只是不希望普通用户能够通过输入数字 ID 导航到其他组。
【问题讨论】:
-
“生成唯一参考 ID 的方法是什么……(但很简单)?”你考虑过 UUID v4 吗?
-
@IljaEverilä 谢谢!我本来想说 UUID 生成的 ID 太长了,但是我在查找 uuid 后发现了 shortuuid。
标签: python flask sqlalchemy primary-key uniqueidentifier