删除表后重置id计数()

时间:2014-04-13 02:23:28

标签: postgresql sqlalchemy flask-sqlalchemy

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

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()起作用以来没有多大意义

1 个答案:

答案 0 :(得分:1)

为循环中的每个表调用TRUNCATE TABLE MyTable RESTART IDENTITY;而不是调用table.delete() - 这应该重置自动增量序列。