Sergey_418
@Sergey_418
Инженер-конструктор, учу python

Как сделать вывод одной определенной строки из БД?

Доброе время суток. Пишу программу которая будет рассказывать анекдоты (в будущем о событиях того или иного дня, ну не суть важна ). Например, если пользователь выбирает кнопку (или пункт в инпут) "анекдот" то из ста анекдотов рандомно должен выбраться один и его вывести. То есть пользователь выбрал ">2 получить" , должен выпасть ему анекдот рандомно, при повторном нажатии (выбора цифры 2) должен опять выпасть анекдот но уже другой. Сам я не программист, только учусь, для специалистов которых тут много думаю не составит труда поделиться советом.

import sqlite3 as sql
import sqlite3

import random

while True:
    def menu():
        
        print("1 - добавление\n2 - получение\n3 - вывести всё")
        choice = int(input("> "))
        con = sql.connect('test1.db')
        with con:
            cur = con.cursor()
            cur.execute("CREATE TABLE IF NOT EXISTS 'test' ('number' INT, 'name' STRING)")
    
            if choice == 1:
                
                number = (int(input ('Press number   ')))
                name = input("Name\n> ")
                
                cur.execute(f"INSERT INTO 'test' VALUES ('{number}','{name}')")
            elif choice == 2:
                
                #c = [random.randint(1,4) for c in range(1)]
                

                c = random.randint(1,4)
                
                print (c)
                cur.execute("SELECT *  FROM  `test` WHERE   number")
                
                rows = cur.fetchmany(c)
                
                for row in rows:
                    
                    
                    print(row[1])



            elif choice == 3:
                cur.execute("SELECT * FROM `test`")
                rows = cur.fetchall()
                
                for row in rows:
                    print(row[0], row[1])
                    
            
               
            else:
                print("Вы ошиблись")

            con.commit()
            cur.close()
            
    menu()


при команде cur.fetchall() выводится вссё как и надо, а вот как заставить программу вывести cur.fetchone() только с определенную которая выдаст переменная С. Уже весь интернет перерыл(((
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 1
@o5a
При данной постановке оптимально было бы выбрать все значения из базы в список (один раз, без сортировок), а затем перемешать его и при каждом запросе выдавать следующее значение по списку.
# считать все свои тексты в список
data = [row[0] for row in cur.execute("SELECT name FROM `test`")]
random.shuffle(data) # теперь данные в рандомном порядке, можно выбирать последовательно


Альтернативный вариант (допустим, этих текстовых данных в таблице очень много и может быть не эффективно тянуть и хранить их все сразу), считать список номеров, также отсортировать и при каждом запросе пользователя делать запрос к базе уже по номеру.

# считать только уникальные номера этих текстов в список
numbers = [row[0] for row in cur.execute("SELECT number FROM `test`")]
random.shuffle(numbers) # теперь данные в рандомном порядке, можно выбирать последовательно

# при запросе пользователя берем следующий номер из нашего рандомного списка
number = ...
# и по нему уже достаем сам текст из базы
text = cur.execute("SELECT name FROM `test` where number = ?", (number, )).fetchone()[0]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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