根据自动增量ID(快速搜索需要?)在数据库中插入哈希ID?

时间:2017-10-02 11:14:54

标签: python mysql database python-3.x hash

我正在编写一个简单的烧瓶API,我需要将一些资源插入数据库。我想在网址中显示哈希ID,例如/api/resource/hSkR3V9aS,而不仅仅是简单的自动增量ID /api/resource/34

我的第一个想法是使用Hashids并从自动增量hash_id生成id并将这两个值存储在数据库中,但问题是我必须先INSERT新的数据行,GET id,然后是UPDATE hash_id字段。

第二次尝试是生成hash_id(例如sha1)而不是来自id,而是生成我传递给数据库并将其用作主键的其他字段(摆脱auto-inc id ),但我担心每次搜索和比较字符串而不是整数都会慢得多。

获得所需基于hash_id的网址以及可接受的数据库SELECT查询速度的最佳方法是什么?

我认为这是最相关的stack question,但它没有回答我的问题。

主要技术细节:Python 3.6,flask_mysqldb库,MySQL数据库 如果我遗漏了一些信息,请告诉我,我会提供。

1 个答案:

答案 0 :(得分:1)

我想我在answer

中找到了一个不错的解决方案
  

使用cursor.lastrowid获取光标上插入的最后一行ID   object,或connection.insert_id()从最后一次插入中获取ID   在那个连接上。

它基于每个连接,因此不用担心我会有2行具有相同的ID。

我现在使用我之前提到的Hashids并将哈希值返回给客户端。 Hashids也可以被解码,每当我从url获得包含此哈希id的请求时,我都会对其进行解码。

另外我发现MongoDB数据库本身会生成这种散列id,也许对于有类似问题的其他人来说这是一个解决方案。