Pregunta

Para fines de prueba, borro (elimino) cada tabla antes de ejecutar el código.

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

do_stuff()

Sin embargo, los nuevos datos id Los valores comienzan desde donde el anterior. idqueda fuera:

Primera iteración:

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

Segunda iteración (eliminar tabla, insertar nuevos datos):

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

¿Hay alguna manera de restablecer el id contar cuando elimino la tabla?


EDITAR:Parece que lo rompí, la mesa no está limpia en absoluto ahora.

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 tabla todavía se está agregando (usando db.session.add_all() y db.session.commit()).Sin embargo, clear() no hace nada.Cuando inicio sesión como postgres usuario en terminal y ejecutar directamente TRUNCATE TABLE myTable RESTART IDENTITY CASCADE, funciona.

table.name da los nombres correctos.Eso me lleva a creer que algo anda mal db.engine.execute(), pero eso no tiene mucho sentido ya que db.session.add_all() obras

¿Fue útil?

Solución

Llamar TRUNCATE TABLE MyTable RESTART IDENTITY; para cada tabla en el bucle en lugar de llamar table.delete() - esto debería restablecer la secuencia de incremento automático.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top