Как очистить базу данных, сбросив все записи с помощью sqlalchemy?
Я использую SQlAlchemy. Я хочу удалить все записи, эффективно представленные в базе данных, но я не хочу отказаться от таблицы/базы данных.
Я пробовал со следующим кодом.
con = engine.connect()
trans = con.begin()
con.execute(table.delete())
trans.commit()
Кажется, он не очень эффективен, так как я повторяю всю таблицу, присутствующую в базе данных.
Может ли кто-нибудь предложить мне лучший и эффективный способ сделать это?
Любая помощь здесь очень ценится.
Ответы
Ответ 1
Если моделирование основывается на существующей схеме БД (обычно используется autoload=True
), вы не можете избежать удаления данных в каждой таблице. MetaData.sorted_tables
пригодится:
for tbl in reversed(meta.sorted_tables):
engine.execute(tbl.delete())
Если ваши модели определяют полную схему, нет ничего проще, чем drop_all
/create_all
(как уже указывалось @jadkik94).
Кроме того, TRUNCATE
никогда не будет работать над таблицами, на которые ссылается ForeignKeys
, что значительно ограничивает использование.
Ответ 2
Для меня было выполнено tbl.drop(engine)
, но не engine.execute(tbl.delete())
SQLAlchemy 0.8.0b2 и
Python 2.7.3