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 шт):
Причина в том что исспользуется fetchall после которого курсор пуст, то есть применение fetchone после fetchall всегда вернёт none.
Есть буфер данных после выполнения запроса, который опустошается при обращении к нему
И 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 ничего не возвращает (возвращает пустой список), значит в таблице нет данных по текущему запросу