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)