表删除后重置 id 计数()
-
21-12-2019 - |
题
出于测试目的,我在执行代码之前清除(删除)每个表。
for table in reversed(db.metadata.sorted_tables):
engine.execute(table.delete())
do_stuff()
然而,新数据的 id
值从前一个值开始 id
被遗漏了:
第一次迭代:
id | value
-----+---------
1 | hi
2 | there
第二次迭代(删除表,插入新数据):
id | value
-----+---------
3 | good
4 | day
有什么办法可以重置 id
当我删除表时计数?
编辑:看来我把它弄坏了,桌子现在根本没有清理干净
config.py
SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:myPassword@localhost/myDatabase'
app.py
app = Flask(__name__)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)
models.py
from app import app, db
def clear():
for table in reversed(db.metadata.sorted_tables):
db.engine.execute('TRUNCATE TABLE ' + table.name + ' RESTART IDENTITY CASCADE')
该表仍在添加中(使用 db.session.add_all()
和 db.session.commit()
)。然而, clear()
什么也没做。当我以 postgres
用户在 terminal
并直接执行 TRUNCATE TABLE myTable RESTART IDENTITY CASCADE
, , 有用。
table.name
给出正确的名称。这让我相信有问题 db.engine.execute()
, ,但这没有多大意义,因为 db.session.add_all()
作品
解决方案
称呼 TRUNCATE TABLE MyTable RESTART IDENTITY;
对于循环中的每个表而不是调用 table.delete()
- 这应该重置自动增量序列。
不隶属于 StackOverflow