python - 根据自增id在数据库中插入hash id(快速搜索需要吗?)

标签 python mysql database python-3.x hash

我正在编写一个简单的 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, or connection.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/

相关文章:

python - 如何根据 pandas 中的标签仅选择某些行?

php - 使用php从mysql数据库中的特定用户获取信息

c# - 试图弄清楚这个数据库文件是否有压缩数据

database - Go MongoDB (mgo) - 不释放关闭的连接

python - np.array with inhomogeneos data (str+float)

Python LevelDB (plyvel) - 在同一键中存储图像字节和字典

python - 选择 id = "in the python list"的名称?

mysql - 使用一个存储过程插入多行

MySQL 数据透视查询将字段名称放入查询结果中

mysql - 每天计算累计用户的正确方法是什么?