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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top