#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. хаха.. Мне нужно немного поспать. Большое спасибо, не могу поверить, что я это пропустил.