Question

À des fins de test, j'efface (supprime) chaque table avant d'exécuter le code.

for table in reversed(db.metadata.sorted_tables):
    engine.execute(table.delete())

do_stuff()

Cependant, les nouvelles données id les valeurs commencent à partir de là où les valeurs précédentes ids'est arrêté :

Première itération :

 id  | value   
-----+---------
 1   | hi      
 2   | there   

Deuxième itération (supprimer le tableau, insérer de nouvelles données) :

 id  | value   
-----+---------
 3   | good    
 4   | day     

Existe-t-il un moyen de réinitialiser le id compter quand je supprime la table ?


MODIFIER:il semble que je l'ai cassé, la table n'est pas du tout vide maintenant

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')

Le tableau est toujours en cours d'ajout (en utilisant db.session.add_all() et db.session.commit()).Cependant, clear() ne fait rien.Lorsque je me connecte en tant que postgres utilisateur dans terminal et exécutez directement TRUNCATE TABLE myTable RESTART IDENTITY CASCADE, Ça marche.

table.name donne les noms corrects.Cela m'amène à croire qu'il y a quelque chose qui ne va pas db.engine.execute(), mais cela n'a pas beaucoup de sens puisque db.session.add_all() travaux

Était-ce utile?

La solution

Appel TRUNCATE TABLE MyTable RESTART IDENTITY; pour chaque table de la boucle au lieu d'appeler table.delete() - cela devrait réinitialiser la séquence d'incrémentation automatique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top