【问题标题】:Reset increment value in flask-sqlalchemy [duplicate]在flask-sqlalchemy中重置增量值[重复]
【发布时间】:2018-04-17 08:42:37
【问题描述】:

如何在删除行后重置 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

我该如何解决这个问题?

【问题讨论】:

  • 设置增量计数,这里是sql命令: ALTER TABLE table AUTO_INCREMENT = number;不知道他们是否有做同样事情的 sqlalchemy 方法。
  • 比如你是怎么用flask-sqlalchemy做的
  • 试试 db.engine.execute("ALTER TABLE users AUTO_INCREMENT = 5")

标签: python sqlalchemy


【解决方案1】:

您的数据库将跟踪您的自动增量 ID!所以你不能做这样的事情。顺便说一句,flask-sqlalchemy 问题无关紧要!如果你真的想这样做,你必须计算出你可以使用的左边 id 并用那个数字填充它!例如:

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

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

step01,您必须使用缓存来执行此操作!这里我推荐使用redis

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

step03,在插入任何新行之前,请检查您的redis 中是否有可用的id!如果为真,将其弹出并插入您弹出的id

step04,代码如下:

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 .... 

【讨论】:

    猜你喜欢
    • 2018-09-14
    • 2021-09-26
    • 2015-03-01
    • 2021-06-14
    • 2021-08-04
    • 1970-01-01
    • 2021-06-14
    • 2015-12-21
    • 2011-10-29
    相关资源
    最近更新 更多