SQLAlchemy: увеличение первичного ключа на основе предыдущих данных - PullRequest
0 голосов
/ 18 июня 2020

Я подключаюсь к контейнеру postgres docker из приложения flask.

После каждой операции вставки первичный ключ увеличивается до следующего значения. Итак, если я вставляю 5 записей и удаляю их все, а затем вставляю новую запись, ее первичный ключ будет 6.

Есть ли способ изменить это значение на 1, поскольку других записей в папке нет. таблица?

Ниже мой код для models.py:

from app import db

class Cats(db.Model):
    __tablename__ = "cats"
    id    = db.Column(db.Integer, primary_key=True)
    name  = db.Column(db.String(64), unique=True)
    price = db.Column(db.Integer)
    breed = db.Column(db.String(64))

и database.py:

from app import db

def get_all(model):
    data = model.query.all()
    return data


def add_instance(model, **kwargs):
    instance = model(**kwargs)
    db.session.add(instance)
    commit_changes()


def delete_instance(model, id):
    model.query.filter_by(id=id).delete()
    commit_changes()


def edit_instance(model, id, **kwargs):
    instance = model.query.filter_by(id=id).all()[0]
    for attr, new_value in kwargs.items():
        setattr(instance, attr, new_value)
    commit_changes()


def commit_changes():
    db.session.commit()

1 Ответ

0 голосов
/ 18 июня 2020

Основная цель первичного ключа - «навсегда» идентифицировать ваши записи. После присвоения указанной записи c первичный ключ не должен «повторно использоваться» после удаления записи.

Потому что, когда вы добавляете записи 1,2,3,4,5 и удаляете запись 3 , вам также не следует отслеживать тот факт, что "3" теперь снова доступна.

Или, другими словами: первичные ключи не предназначены для "подсчета".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...