Почему информация внутри моей базы данных не печатается?

#python-3.x #sqlite

Вопрос:

Итак, я запускаю тестовую программу, пытаясь разобраться в sqlite здесь, я просто пытаюсь распечатать информацию внутри моей БД после того, как я ВСТАВЛЮ ее из объекта, почему fetchall не печатает никакой информации в БД?

 import sqlite3

conn = sqlite3.connect(':memory:')

cursor = conn.cursor()



class User:
    def __init__(self, category, email, username, password):
        self.category = category
        self.email = email
        self.username = username
        self.password = password
        self.__version = 1

    def __str__(self):
            return f"""
        Category: {self.category}
        Email: {self.email}
        Username: {self.username}
        Password: {self.password}
        """

def spinUpDB():
    cursor.execute("""CREATE TABLE test (
                    category text PRIMARY KEY,
                    email text,
                    username text,
                    password text)""")
    conn.commit()


spinUpDB()

category = input("Enter category: ")
email = input("Enter email: ")
username = input("Enter username: ")
password = input("Enter pass: ")


user1 = User(category, email, username, password)

conn.execute("INSERT INTO test VALUES (:category, :email, :username, :password)",
             {'category': user1.category, 'email': user1.email, 'username': user1.username, 'password': user1.password})
print(user1)
conn.commit()

conn.execute("SELECT * FROM test WHERE category=:category", {'category':'yt'})
conn.commit()
print(cursor.fetchall())
 

Ответ №1:

тебе нужно бежать .execute() дальше cursor , а не conn

 cursor.execute("SELECT * FROM test WHERE category=:category", {'category':'t1'})
print(cursor.fetchall())
 

также обратите внимание, что нет необходимости в .commit() последующем SELECT заявлении.

Когда вы запускаете conn.execute вместо cursor.execute этого , он возвращает вам новый экземпляр курсора, и ваш инициал cursor в следующей строке не выполняет запрос select

Из документации:

выполнить(sql[, параметры]) Это нестандартный ярлык, который создает объект курсора путем вызова метода cursor (), вызывает метод execute() курсора с заданными параметрами и возвращает курсор.

Комментарии:

1. хаха.. Мне нужно немного поспать. Большое спасибо, не могу поверить, что я это пропустил.