質問

テスト目的で、コードを実行する前にすべてのテーブルをクリア(削除)します。

for table in reversed(db.metadata.sorted_tables):
    engine.execute(table.delete())

do_stuff()
.

しかしながら、新しいデータのid値は、前のidが残ってからの開始:

最初の反復:

 id  | value   
-----+---------
 1   | hi      
 2   | there   
.

2回目の反復(削除、新しいデータの挿入):

 id  | value   
-----+---------
 3   | good    
 4   | day     
.

テーブルを削除すると、idカウントをリセットする方法はありますか?


編集:私が壊したようです、表は今や現在全然消去されません

config.py

SQLALCHEMY_DATABASE_URI = 'postgresql://postgres:myPassword@localhost/myDatabase'


app.py

app = Flask(__name__)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)


models.py

from app import app, db

def clear():
    for table in reversed(db.metadata.sorted_tables):
        db.engine.execute('TRUNCATE TABLE ' + table.name + ' RESTART IDENTITY CASCADE')
.

テーブルはまだ追加されています(db.session.add_all()db.session.commit()を使用)。ただし、clear()は何もしません。postgresterminalユーザーとしてログインし、TRUNCATE TABLE myTable RESTART IDENTITY CASCADEを直接実行すると機能します。

table.nameは正しい名前を与えます。それは私がdb.engine.execute()に何か問題があると信じるようにつながりますが、それはdb.session.add_all()が機能して以来もっと意味がありません

役に立ちましたか?

解決

TRUNCATE TABLE MyTable RESTART IDENTITY;を呼び出すのではなく、ループ内のすべてのテーブルの呼び出しtable.delete() - これは自動増分シーケンスをリセットする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top