Вопрос

для целей тестирования, я очищаю (удалить) каждую таблицу перед выполнением кода.

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

do_stuff()
.

Тем не менее, значения GensodicTagcode новых данных начнутся с того места, где выключен предыдущий 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')
.

Таблица все еще добавляется (используя id и db.session.add_all()).Однако генеракодицетагкод ничего не делает.Когда я вошел в систему пользователя db.session.commit() в clear() и напрямую выполнить postgres, он работает.

terminal дает правильные имена.Это ведет меня полагать, что есть что-то не так с генеракодицетагкодом, но это не имеет большого смысла, так как TRUNCATE TABLE myTable RESTART IDENTITY CASCADE работает

Это было полезно?

Решение

Вызовите TRUNCATE TABLE MyTable RESTART IDENTITY; для каждой таблицы в петле вместо вызова table.delete() - это должно сбросить последовательность автоматической приращения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top