Pergunta

Para fins de teste, limpo (excluo) todas as tabelas antes de executar o código.

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

do_stuff()

No entanto, os novos dados id os valores começam onde o anterior idfoi interrompido:

Primeira iteração:

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

Segunda iteração (excluir tabela, inserir novos dados):

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

Existe alguma maneira de redefinir o id contar quando eu deletar a tabela?


EDITAR:parece que quebrei, a mesa não está limpa agora

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

A tabela ainda está sendo adicionada (usando db.session.add_all() e db.session.commit()).No entanto, clear() faz nada.Quando eu faço login como postgres usuário em terminal e executar diretamente TRUNCATE TABLE myTable RESTART IDENTITY CASCADE, funciona.

table.name dá os nomes corretos.Isso me leva a acreditar que há algo errado com db.engine.execute(), mas isso não faz muito sentido, já que db.session.add_all() funciona

Foi útil?

Solução

Chamar TRUNCATE TABLE MyTable RESTART IDENTITY; para cada tabela no loop em vez de chamar table.delete() - isso deve redefinir a sequência de incremento automático.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top