ID-Anzahl nach Tabellenlöschung zurücksetzen()
-
21-12-2019 - |
Frage
Zu Testzwecken lösche (lösche) ich jede Tabelle, bevor ich Code ausführe.
for table in reversed(db.metadata.sorted_tables):
engine.execute(table.delete())
do_stuff()
Allerdings sind die neuen Daten id
Die Werte beginnen dort, wo die vorherigen Werte liegen id
's weggelassen:
Erste Iteration:
id | value
-----+---------
1 | hi
2 | there
Zweite Iteration (Tabelle löschen, neue Daten einfügen):
id | value
-----+---------
3 | good
4 | day
Gibt es eine Möglichkeit, das zurückzusetzen? id
zählen, wenn ich die Tabelle lösche?
BEARBEITEN:Anscheinend habe ich es kaputt gemacht, der Tisch ist jetzt überhaupt nicht abgeräumt
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')
Die Tabelle wird noch ergänzt (unter Verwendung von db.session.add_all()
Und db.session.commit()
).Jedoch, clear()
tut nichts.Wenn ich mich als anmelde postgres
Benutzer in terminal
und direkt ausführen TRUNCATE TABLE myTable RESTART IDENTITY CASCADE
, Es klappt.
table.name
gibt die richtigen Namen an.Das lässt mich glauben, dass etwas nicht stimmt db.engine.execute()
, aber das macht seitdem nicht viel Sinn db.session.add_all()
funktioniert
Lösung
Anruf TRUNCATE TABLE MyTable RESTART IDENTITY;
für jede Tabelle in der Schleife statt aufzurufen table.delete()
- Dies sollte die automatische Inkrementierungssequenz zurücksetzen.