@Markus_Sinday

Почему не работает команда INSERT INTO в моём коде?

Здравствуйте, Не работает добавление в базу sqlite3, функция "Create_Account" требует в себя имя пользователя, username и пароль, но после выполнения (никаких ошибок нет) ничего не добавляется, это показывает отдельная функция для проверки конкретного username в таблице и также print(всех username из таблицы) после функции добавление в базу.

(Читал на многих форумах решение, но там люди забывают ставить commit(), у меня он прописан сразу после INSERT INTO, но этой строки как будто и не было, смотря по тому, что показывает база.)

(Я возможно, понимаю, что код выглядит не сильно профессионально, надеюсь разобраться не будет сложным)

Буду рад, даже если будут просто ссылки на документацию, которую нужно прочесть, спасибо)

import sqlite3

db = 0
cursor = 0

def AnalizInfo(): 
	global db, cursor

	db = sqlite3.connect('users.db', check_same_thread=False) #Создание базы данных или соединение
	cursor = db.cursor() #Создание курсора для базы

	#---Создать таблицу в базе
	cursor.execute("""CREATE TABLE IF NOT EXISTS users(
			name TEXT,
			username TEXT,
			password TEXT
		)""")

		#username, password - данные пользователей
                #name - имя пользователя
	db.commit()
	#---/////


	#/////



	#---Заполнение первого пользователя, если пользователей не найдено


        #Первое создание элемента при создании таблицы, только эти строки работают почему-то.
	if cursor.execute(f"SELECT username FROM users").fetchone() == None: #Если пользователей не найдено
		cursor.execute(f'INSERT INTO users VALUES (?, ?, ?)', ('Павел', 'Markus', 'Pvl0083777'))
		db.commit()


	#---////////



def Create_Account(name, username, password):
	global db, cursor
	if username in cursor.execute(f"SELECT username FROM users").fetchone(): #Если такой пользователь уже есть
		return 'Такой пользователь уже существует !'
	else:

		try:
                        #Две строки ниже не работают, по какой-то причине(вопрос про них в целом):
			cursor.execute(f'INSERT INTO users VALUES (?, ?, ?)', (name, username, password))
			db.commit()
                        #После этого идёт показ всех username из таблицы users, куда и добавлялся элемент, но он показывает, что добавился только первый элемент при создании базы.
			print(cursor.execute(f"SELECT username FROM users").fetchone()) #Вывести в консоль всю таблицу с username-ми
			return True


		except:
			return False




def main(username, password, types, name=None):
	AnalizInfo() #Первая функция для соединения или создание БД
	if types == 'Check_Account': #Если нужно проверить аккаунт
		return Check_Account(username, password)
	elif types == 'Create_Account': #Если нужно создать аккаунт
		return Create_Account(name, username, password)




print(main('Markus1', 'Pvl0083777', 'Create_Account'))
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
@o5a
Сама команда добавления работает. Но
1. Проверка наличия пользователя в базе неправильная. Можно так
if cursor.execute(f"SELECT username FROM users WHERE username = ?", (username, )).fetchone(): #Если такой пользователь уже есть

2. fetchone возвращает только первую запись, поэтому остальных не видите при выводе "всю таблицу с username-ми", есть fetchall.
3. исключения лучше не гасить совсем, иначе и будет "ошибок нет, но ничего не работает". Лучше их выводить или логировать.
except Exception as e:
    print('ошибка:', e)
    return False
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@galaxy
#После этого идёт показ всех username из таблицы users, куда и добавлялся элемент, но он показывает, что добавился только первый элемент при создании базы.
print(cursor.execute(f"SELECT username FROM users").fetchone()) #Вывести в консоль всю таблицу с username-ми
return True

Что заставляет вас думать, что тут "идёт показ всех username из таблицы users"?
Название метода fetchone() ни на какие мысли не наводит?
Ответ написан
Ваш ответ на вопрос

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

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