Как удалить запись по 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()
Зайцев Дмитрий
источник