Як видалити запис за допомогою 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)
Ben

Чи можете ви використовувати IN за допомогою цього методу?
ram4nd

10
Попередження: таке deleteне буде каскадно, якщо ви покладаєтесь на каскадування в python / ORM. Спочатку потрібно буде запитати об’єкт, а потім видалити .
nirvana-msu

5
що буде, якщо Userне існує?
сенапи

як ми можемо замінити / розширити цей метод delete ()? для користувача класу, визначеного в нашому models.py в додатку «колба».
Хоссен

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

Я отримую помилку, що сеанс використовується
Ryan Aquino

9

Ще одне можливе рішення спеціально, якщо ви хочете пакетне видалення

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.