@SerjLore

При выборе данных в sqlite3 и при fetchone выходит None хотя в db браузере всё хорошо?

Здравствуйте, столкнулся с проблемой отображения и использования данных из дб, в программе"DB Browser for SQlite" всё нормально отображается, но при выполнении кода в fetchone() = None..
Прошу помочь.

Сам код:
import discord
from discord.ext import commands
import os
import asyncio 
from time import strftime, sleep
from colorama import init
init()
from colorama import Fore, Back, Style
import sqlite3

db = sqlite3.connect('bot.db')
sql = db.cursor()

sql.execute("""CREATE TABLE IF NOT EXISTS servers (
	log_id,
	administator,
	owner_guild_id,
	guild_id,
	test
	)""")
db.commit()

def get_pref(bot, message):
	default_prefix = '%'
	guildid = str(message.guild.id)
	print(guildid)
	sql.execute("SELECT test FROM servers WHERE guild_id = ?", (guildid,))
	if sql.fetchone() is not None:
		pref = sql.fetchone()
		print(pref)
		return pref

	else:
		print('Объект "None"')
		sql.execute("UPDATE servers set test = ?", (default_prefix))
		db.commit()

prefix = 'kek'
bot = commands.Bot(command_prefix = get_pref)
bot_author = 694867925634515045
#bot = commands.Bot(command_prefix = prefix)
bot.remove_command('help') # удаляет стартовую хелп команду бота
token = 'кек' # токен бота


Результат в отладке:
5f7a064cdc79b395242057.png
  • Вопрос задан
  • 727 просмотров
Решения вопроса 1
@o5a
Проблема здесь
if sql.fetchone() is not None:
    pref = sql.fetchone()

вызов fetchone() полностью выбирает данные из курсора, в результате последующий вызов fetchone() возвращает null

Нужно сделать fetch в переменную, которую уже потом использовать:
pref = sql.fetchone()
if pref is not None:
    # использовать уже pref напрямую, а не sql.fetchone()


P.S. хотя я наверное не совсем понял проблему, похоже изначально данные даже не выбираются, так что проблема еще в чем-то. Но даже после этого, указанное выше надо исправить, иначе тоже данные не выдаст (но уже по указанной причине).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
LaRN
@LaRN
Senior Developer
Возможно причина в том что вы неверно создаёте таблицу. Вы указали только список полей, но для каждого поля требуется ещё тип указать.
Я про вот этот код:
sql.execute("""CREATE TABLE IF NOT EXISTS servers (
log_id,
administator,
owner_guild_id,
guild_id,
test
)""")
db.commit()
Ответ написан
Ваш ответ на вопрос

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

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