SQLite ничего не возвращает

У меня проблема. SQLite ничего не возвращает. Хотя к базе подключен. И в базе данных точно есть такой id. При запуске возвращает None. Курсор тоже подключен.

def Select(idd: str):
    conn= _connect()
    cursor = conn.cursor()
    cursor.execute("""SELECT id FROM users WHERE coin = ?""",[int(idd)])
    print(cursor.fetchall())
    return cursor.fetchone()
def _connect():
    global _conn
    if _conn is None:
        _conn = sqlite3.connect('data_base.db' )
    return _conn

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

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

Причина в том что исспользуется fetchall после которого курсор пуст, то есть применение fetchone после fetchall всегда вернёт none.

→ Ссылка
Автор решения: gil9red

Есть буфер данных после выполнения запроса, который опустошается при обращении к нему

И fetchall считает полностью и вернет в виде списка, а если данных нет, то вернется пустой список. А fetchone считает одну запись, а если данных нет, то вернет None.

Подготовил пример данных:

import sqlite3

connect = sqlite3.connect(":memory:")

connect.executescript('''\
CREATE TABLE Test (
    id INTEGER PRIMARY KEY,
    name TEXT,
    value TEXT
);

INSERT INTO Test (name, value) VALUES ('One', '1');
INSERT INTO Test (name, value) VALUES ('Two', '1');
INSERT INTO Test (name, value) VALUES ('Three', '2');
''')

Выборки из fetchall + fetchone, как видно fetchall вычитал всё, поэтому fetchone вернул None:

cursor = connect.cursor()
cursor.execute('select * from Test where value = ?', ['1'])
print(cursor.fetchall())  # [(1, 'One', '1'), (2, 'Two', '1')]
print(cursor.fetchone())  # None

Выборки из fetchone + fetchall, как видно fetchone вернул первую запись, а fetchall оставшиеся:

cursor.execute('select * from Test where value = ?', ['1'])
print(cursor.fetchone())  # (1, 'One', '1')
print(cursor.fetchall())  # [(2, 'Two', '1')]

Выборки из fetchall + fetchall, как видно fetchall вычитал всё, поэтому следующий fetchall вернул пустой список:

cursor.execute('select * from Test where value = ?', ['1'])
print(cursor.fetchall())  # [(1, 'One', '1'), (2, 'Two', '1')]
print(cursor.fetchall())  # []

Поэтому, ваш пример с fetchall и последующим fetchone всегда из функции будет None возвращать. А если же у вас и fetchall ничего не возвращает (возвращает пустой список), значит в таблице нет данных по текущему запросу

→ Ссылка