Réinitialiser le nombre d'identifiants après la suppression de la table()
-
21-12-2019 - |
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 id
s'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
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.