14

私は自分のアプリにormを使用しており、異なるdbms間で変更する際のsql構文エラーを避けるためにsqlを使用しないようにしています。

現時点では、sqlite と mysql でテストしています。使用できるテーブルを削除することがわかりました:

db.session.query(models.MyTable).delete()

残念ながら、このメソッドは、自動インクリメントのカウントを 0 にリセットしないため、実際にはテーブルを「切り捨て」ません。

SqlAlchemy orm で実際の切り捨てを行う方法はありますか?

4

2 に答える 2

3

SQLAlchemyメソッドは SQLクエリdelete(...)に変換されます。DELETE FROMこのクエリは、AUTO_INCREMENT カウンターをリセットしません。MySQL でカウンターをリセットするには、次のようなクエリを実行する必要があります。

ALTER TABLE tbl AUTO_INCREMENT = 100;

私が間違っていなければ、SQLAlchemy には類似物がありません。

于 2012-11-28T15:31:22.610 に答える
0

操作がないtruncate()ため、テーブルからすべてのエントリを削除して自動インクリメント カウントをリセットするための sqlalchemy での簡単な回避策は、次のようにテーブルを削除して再作成することです。

Base.metadata.drop_all(engine, tables=[YourTable.__table__])
Base.metadata.create_all(engine, tables=[YourTable.__table__])

(テーブルを削除するための代替の sqlalchemy 構文の例については、このスタックオーバーフローの投稿を確認してください)

于 2021-02-16T20:19:39.663 に答える