@ne_nuzhen

Как в базе данных SQLite3 к столбцу добавить autoincrement?

def add():
    kind1 = kind_Entry.get()
    species1 = species_Entry.get()
    birth1 = birth_Entry.get()
    weight1 = weight_Entry.get()
    cursor.execute("INSERT INTO animal (kind, species, birth_day, weight) VALUES (?, ?, ?, ?)", (kind1, species1,
                                                                                                 birth1, weight1))
    db.commit()
    cursor.execute("SELECT * FROM animal;")
    db.commit()
    note.destroy()
with sqlite3.connect('D:\Education\practice.db') as db:
    cursor = db.cursor()

    cursor.execute("""CREATE TABLE IF NOT EXISTS
        animal(
            id        INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
            kind      TEXT,
            species   TEXT,
            birth_day DATE,
            weight    INT)
    """)
    db.commit()

Здесь кусок кода, я создал бд, где указал, что id будет автоинкрементироваться (если такое слово есть), и функция, в которой я добавляю в базу данных данные (в функции, где я использую get() я просто беру значения с формы tkinter, я думаю указывать это здесь необязательно). Но есть проблема, например, у меня в базе есть 4 строки, если я удалю последнюю 4 строку, а потом захочу добавить новые данные в бд, то у меня id уже будет №5, то есть он продолжает расти. Как сделать так, чтобы при удалении строки, у меня id не увеличивался просто на единицу каждый раз?
  • Вопрос задан
  • 45 просмотров
Пригласить эксперта
Ответы на вопрос 2
shabelski89
@shabelski89
engineer
Попробуйте так
DELETE FROM animal;
DELETE FROM sqlite_sequence WHERE name = 'animal';

потому пробуйте
cursor.execute("INSERT INTO animal (kind, species, birth_day, weight) VALUES (?, ?, ?, ?)", (kind1, species1, birth1, weight1))
Ответ написан
@rPman
можно написать триггер на добавление новой записи, чтобы обновлял нужное тебе поле сделав что то типа select max+1

p.s. для идентификаторов это плохая практика, не смешивай идентификацию и порядковый номер, особенно если данные могут удаляться, как только ты начнешь ссылаться на записи извне по идентификатору, то у тебя начнутся конфликты

p.p.s. а если ты удаляешь 'из середины' твоей последовательности, а потом добавляешь новую, ты хочешь получить новое значение или освободившееся старое?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы