Python, sqlite, fetchone()

столкнулся с проблемой получения данных из бд.

def addKid():
    PARENT = input("NAME of father or mother: ")
    KGARTEN = input("NAME of KinderGarten: ")

    cur.execute(f"INSERT INTO Parents(NAME) VALUES(?);", PARENT )
    con.commit()

    cur.execute(f"SELECT max(ID_PARENTS) FROM Parents WHERE NAME = ?", [PARENT])
    PARENT_ID = cur.fetchone()
    con.commit()
    print("PARENT ", PARENT_ID)

    cur.execute(f"SELECT ID_KDG FROM kinderGarten WHERE NAME = ?", [KGARTEN])
    KGARTEN_ID = cur.fetchone()
    con.commit()
    print("KGARTEN_ID ", KGARTEN_ID)

Проблема заключается в том что при вызове fetchone(), возвращается None. Пытался найти в чем причина, нашел ответ насчет con.commit(), но это то же не помогает, есть какие-то идеи? Иногда функция отрабатываать правильно и возвращает 2 значения PARENT_ID, KGARTEN_ID, а иногда частично и возвращает PARENT_ID, KGARTEN_ID = None


Ответы (3 шт):

Автор решения: tot_samij

Убери con.commit, это пуш в БД, а ты тянешь от туда.

Мой вариант кода :

sql = "SELECT id_user FROM users WHERE id_user=%s"
        val = (str(item),)
        cur.execute(sql, val)
        chek = cur.fetchone()
→ Ссылка
Автор решения: Violet
   db = 'database.db' 

   def search(a):
        conn = sqlite3.connect(db)
        cursor = conn.execute("SELECT * FROM table WHERE a = ?", (a,)).fetchone()
    
        if cursor is None:
            conn.close()
            return None
        else:
            conn.close()
            return cursor[0]
→ Ссылка
Автор решения: MaxU

я бы делал это так:

import sqlite3

con = sqlite3.connect(r"/tmp/test.sqlite")
cur = con.cursor()

cur.execute("create table parents(id integer primary key autoincrement, name text)")

def add_kid(con, parent):
    cur = con.cursor()
    cur.execute(f"INSERT INTO Parents(NAME) VALUES(?)", [parent])
    con.commit()
    # return last generated AUTOINCREMENT ID
    return cur.lastrowid

def get_kgarten_id(kgarten):
    cur.execute(f"SELECT ID_KDG FROM kinderGarten WHERE NAME = ?", [kgarten])
    kgarten_id = cur.fetchone()
    return kgarten_id[0] if kgarten_id else None

PARENT = input("NAME of father or mother: ")
KGARTEN = input("NAME of KinderGarten: ")


parent_id = add_kid(con, PARENT)
kgarten_id = get_kgarten_id(KGARTEN)
→ Ссылка