出于测试目的,我在执行代码之前清除(删除)每个表。
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()
起作用以来没有多大意义
答案 0 :(得分:1)
为循环中的每个表调用TRUNCATE TABLE MyTable RESTART IDENTITY;
而不是调用table.delete()
- 这应该重置自动增量序列。