Restablecer el recuento de ID después de eliminar la tabla ()
-
21-12-2019 - |
Pregunta
Para fines de prueba, borro (elimino) cada tabla antes de ejecutar el código.
for table in reversed(db.metadata.sorted_tables):
engine.execute(table.delete())
do_stuff()
Sin embargo, los nuevos datos id
Los valores comienzan desde donde el anterior. id
queda fuera:
Primera iteración:
id | value
-----+---------
1 | hi
2 | there
Segunda iteración (eliminar tabla, insertar nuevos datos):
id | value
-----+---------
3 | good
4 | day
¿Hay alguna manera de restablecer el id
contar cuando elimino la tabla?
EDITAR:Parece que lo rompí, la mesa no está limpia en absoluto ahora.
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')
La tabla todavía se está agregando (usando db.session.add_all()
y db.session.commit()
).Sin embargo, clear()
no hace nada.Cuando inicio sesión como postgres
usuario en terminal
y ejecutar directamente TRUNCATE TABLE myTable RESTART IDENTITY CASCADE
, funciona.
table.name
da los nombres correctos.Eso me lleva a creer que algo anda mal db.engine.execute()
, pero eso no tiene mucho sentido ya que db.session.add_all()
obras
Solución
Llamar TRUNCATE TABLE MyTable RESTART IDENTITY;
para cada tabla en el bucle en lugar de llamar table.delete()
- esto debería restablecer la secuencia de incremento automático.