微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 表删除后重置id计数()

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

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用户身份登录并直接执行TruncATE TABLE myTable RESTART IDENTITY CASCADE时,它可以正常工作.

table.name给出正确的名称.这让我相信db.engine.execute()有问题,但是因为db.session.add_all()工作没有多大意义

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐