出于测试目的,我在执行代码之前清除(删除)每个表。

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() - 这应该重置自动增量序列。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top