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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top