문제

테스트 목적으로 코드를 실행하기 전에 모든 테이블을 삭제(삭제)합니다.

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

do_stuff()

그러나 새로운 데이터의 id 값은 이전 값에서 시작됩니다. id중단되었습니다:

첫 번째 반복:

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

두 번째 반복(테이블 삭제, 새 데이터 삽입):

 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() 아무것도 하지 않습니다.내가 로그인 할 때 postgres 사용자 terminal 직접 실행하고 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