Redefinir contagem de ID após exclusão da tabela()
-
21-12-2019 - |
Pergunta
Para fins de teste, limpo (excluo) todas as tabelas antes de executar o código.
for table in reversed(db.metadata.sorted_tables):
engine.execute(table.delete())
do_stuff()
No entanto, os novos dados id
os valores começam onde o anterior id
foi interrompido:
Primeira iteração:
id | value
-----+---------
1 | hi
2 | there
Segunda iteração (excluir tabela, inserir novos dados):
id | value
-----+---------
3 | good
4 | day
Existe alguma maneira de redefinir o id
contar quando eu deletar a tabela?
EDITAR:parece que quebrei, a mesa não está limpa agora
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')
A tabela ainda está sendo adicionada (usando db.session.add_all()
e db.session.commit()
).No entanto, clear()
faz nada.Quando eu faço login como postgres
usuário em terminal
e executar diretamente TRUNCATE TABLE myTable RESTART IDENTITY CASCADE
, funciona.
table.name
dá os nomes corretos.Isso me leva a acreditar que há algo errado com db.engine.execute()
, mas isso não faz muito sentido, já que db.session.add_all()
funciona
Solução
Chamar TRUNCATE TABLE MyTable RESTART IDENTITY;
para cada tabela no loop em vez de chamar table.delete()
- isso deve redefinir a sequência de incremento automático.