Ripristina il conteggio ID dopo la tabella Elimina ()
-
21-12-2019 - |
Domanda
Ai fini del test, ho cancellato (eliminare) ogni tabella prima dell'esecuzione del codice.
for table in reversed(db.metadata.sorted_tables):
engine.execute(table.delete())
do_stuff()
.
Tuttavia, i valori id
dei nuovi dati iniziano da dove il precedente id
è stato spento:
Prima iterazione:
id | value
-----+---------
1 | hi
2 | there
.
Seconda iterazione (Elimina tabella, inserire nuovi dati):
id | value
-----+---------
3 | good
4 | day
.
C'è un modo per ripristinare il conteggio id
quando elimino la tabella?
.
Modifica: sembra l'ho rotto, il tavolo non è stato cancellato adesso
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 tabella viene ancora aggiunta a (utilizzando db.session.add_all()
e db.session.commit()
).Tuttavia, clear()
non fa nulla.Quando accedo come utente postgres
in terminal
e esegue direttamente TRUNCATE TABLE myTable RESTART IDENTITY CASCADE
, funziona.
table.name
fornisce i nomi corretti.Ciò mi porta a credere che ci sia qualcosa di sbagliato con db.engine.execute()
, ma questo non ha molto senso da quando funziona db.session.add_all()
Soluzione
Chiama TRUNCATE TABLE MyTable RESTART IDENTITY;
per ogni tabella nel ciclo invece di chiamare table.delete()
: questo dovrebbe ripristinare la sequenza di incremento automatico.