如何在删除行后重置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
我该如何解决这个问题?
答案 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 list
,Order-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 ....