重置flask-sqlalchemy中的增量值

时间:2018-04-17 08:42:37

标签: python sqlalchemy

如何在删除行后重置flask-sqlalchemy中的增量计数,以便下一个插入将获取已删除行的ID? 即:

table users:
user_id | name |
________________
3       | mbuvi
4       | meshack
5       | You

当我删除id = 5的用户时; 用户的下一个插入是id = 6,但我希望它有id = 5;

user_id | name |
________________
3       | mbuvi
4       | meshack
6       | me

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的数据库将跟踪您的自动增量ID!所以你不能做这样的事情。但是对flask-sqlalchemy问题没有意义!如果你真的想这样做,你必须计算你可以使用的左侧id并用它填充它!例如:

+----+--------+
| id | number |
+----+--------+
|  1 |    819 |
|  2 |    829 |
|  4 |    829 |
|  5 |    829 |
+----+--------+

你必须找到id(3)然后插入id。所以这导致一个查询所有表的util你得到那个位置!不要为什么你需要这样做,但仍然有解决方案!

step01,你必须使用缓存才能做到这一点!在这里我建议使用redis

步骤02,如果您要删除任何行,只需将id缓存到redis listOrder-Set就是您的最佳选择!在删除任何行之前,将其保存到缓存中!

步骤03,在插入任何新行之前,请检查redis中是否有任何ID可用!如果为true,则将其弹出并将其与您弹出的id一起插入!

步骤04,代码如下:

def insert_one(data):
   r = redis.Redis()
   _id = r.pop('ID_DB')
   if _id:
      cursor.execute("insert into xxx(id, data)values(%s, %s)", data)
   else:
      # use default increment id
      cursor.execute("insert into xxx(data)values(%s)", data)

def delete(data, id):
      # query the target which you will delete
      # if you delete by condtion `id` that's best
      r = redis.Redis()
      r.push('ID_DB',id)
      # DO the rest of you want ...
      # delete ....