32

私はSQlAlchemyを使用しています。データベースに効率的に存在するすべてのレコードを削除したいのですが、テーブル/データベースを削除したくありません。

次のコードで試してみました。

con = engine.connect()
trans = con.begin()

con.execute(table.delete())
trans.commit()

データベースに存在するすべてのテーブルを反復処理しているため、あまり効率的ではないようです。誰かが私にこれを行うためのより良いそして効率的な方法を提案できますか?

どんな種類の助けもここで大いに感謝します。

4

2 に答える 2

39

モデルが既存の DB スキーマに依存している場合 (通常は を使用autoload=True)、各テーブルのデータを削除せざるを得ません。MetaData.sorted_tables便利です:

for tbl in reversed(meta.sorted_tables):
    engine.execute(tbl.delete())

モデルが完全なスキーマを定義する場合、drop_all/よりも単純なものはありませんcreate_all(@jadkik94 によって既に指摘されているように)。

さらに、TRUNCATEによって参照されるテーブルではとにかく動作しないためForeignKeys、使用が大幅に制限されます。

于 2012-06-27T20:16:03.910 に答える
8

私にとってパッティングtbl.drop(engine)は機能しましたが、機能しませんでしたengine.execute(tbl.delete())

SQLAlchemy 0.8.0b2 および Python 2.7.3

于 2013-02-25T23:35:03.447 に答える