Como excluir um registro por id no Flask-SQLAlchemy

128

Eu tenho userstabela no meu banco de dados MySql. Esta tabela tem id, namee agecampos.

Como posso excluir algum registro id?

Agora eu uso o seguinte código:

user = User.query.get(id)
db.session.delete(user)
db.session.commit()

Mas não quero fazer nenhuma consulta antes da operação de exclusão. Há alguma maneira de fazer isso? Eu sei, posso usar db.engine.execute("delete from users where id=..."), mas gostaria de usar o delete()método

Sergey
fonte

Respostas:

206

Você consegue fazer isso,

User.query.filter_by(id=123).delete()

ou

User.query.filter(User.id == 123).delete()

Certifique-se de commitpara delete()entrar em vigor.

adarsh
fonte
19
certifique-se de colocar db.session.commit()no final. onde o db: db = SQLAlchemy(app)
Ben
Você pode usar IN com esse método?
ram4nd
10
Aviso: deleteNão haverá cascata se você confiar em cascata no python / ORM. Você precisará consultar o objeto primeiro e depois excluir .
Nirvana-msu
5
o que aconteceria se Usernão existe?
Senaps 14/04/19
como podemos substituir / estender esse método delete ()? para uma classe Usuário definido em nossos models.py no aplicativo de balão.
Hossein
35

Só quero compartilhar outra opção:

# mark two objects to be deleted
session.delete(obj1)
session.delete(obj2)

# commit (or flush)
session.commit()

http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#deleting

Neste exemplo, os seguintes códigos devem funcionar bem:

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()
Steve
fonte
Estou recebendo erro de que a sessão está em uso
Ryan Aquino
9

Outra solução possível, especialmente se você deseja excluir lotes

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
Zaytsev Dmitry
fonte