Как удалить запись по id в Flask-SQLAlchemy


128

У меня есть usersтаблица в базе данных MySql. Эта таблица имеет id, nameи ageполя.

Как я могу удалить какую-то запись id?

Сейчас я использую следующий код:

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

Но я не хочу делать никаких запросов перед операцией удаления. Есть какой-либо способ сделать это? Я знаю, могу использовать db.engine.execute("delete from users where id=..."), но хотел бы использовать delete()метод.

Ответы:


206

Ты можешь сделать это,

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

или

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

Убедитесь , что commitдля delete()вступили в силу.


19
убедитесь, что вы поставили db.session.commit()в конце. где db: db = SQLAlchemy(app)
Бен

Можете ли вы использовать IN с этим методом?
ram4nd

10
Предупреждение: deleteэто не будет каскадным, если вы полагаетесь на каскадирование в python / ORM. Вам нужно сначала запросить объект, а затем удалить .
nirvana-msu 02

5
что будет, если Userне существует?
senaps

как мы можем переопределить / расширить этот метод delete ()? для класса User, определенного в нашем models.py в приложении flask.
Оссейн,

36

Просто хочу поделиться еще одним вариантом:

# 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

В этом примере следующие коды будут работать нормально:

obj = User.query.filter_by(id=123).one()
session.delete(obj)
session.commit()

Я получаю сообщение об ошибке, что сеанс используется
Райан Акино,

10

Другое возможное решение, особенно если вы хотите удалить пакет

deleted_objects = User.__table__.delete().where(User.id.in_([1, 2, 3]))
session.execute(deleted_objects)
session.commit()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.