我正在编写一个简单的 Flask-restful API,我需要将一些资源插入数据库。我希望哈希 ID 在 URL 中可见,如 /api/resource/hSkR3V9aS
而不仅仅是简单的自动递增 id /api/resource/34
我的第一个想法是使用 Hashids只需从自动增量 id
生成 hash_id
并将这两个值存储在数据库中,但问题是我必须先 INSERT
新数据行,GET
id
,然后UPDATE
hash_id
字段。
第二次尝试是不是从 id
而是从我传递给数据库的其他一些字段生成 hash_id
(例如 sha1),并将其用作主键(获取摆脱 auto-inc id),但我担心每次搜索和比较字符串而不是 int 会慢得多。
实现所需的基于 hash_id
的 URL 以及可接受的数据库 SELECT
查询速度的最佳方式是什么?
我认为这是最相关的stack question ,但它没有回答我的问题。
主要技术细节:Python 3.6、flask_mysqldb库、MySQL数据库 如果我遗漏了一些信息,请告诉我,我会提供。
最佳答案
我想我自己在这个answer中找到了一个不错的解决方案
Use
cursor.lastrowid
to get the last row ID inserted on the cursor object, orconnection.insert_id()
to get the ID from the last insert on that connection.
它是基于每个连接的,因此不用担心我会有 2 行具有相同的 ID。
我现在将使用我自己之前提到的 Hashids并将哈希值返回给客户端。哈希值也可以被解码,每次我从包含此哈希 ID 的 url 收到请求时,我都会执行此操作。
我还发现MongoDB数据库自己生成这种哈希ID,也许这是其他有类似问题的解决方案。
关于python - 根据自增id在数据库中插入hash id(快速搜索需要吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46524420/