/
dm1tryr
/
Viktorina
Обзор
Документация
Войти
/
dm1tryr
/
Viktorina
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
db_scripts.py
189 строк
6 KB
dm1tryr
Сайт
03 май 2026, 15:09
Верифицирован
03 май 2026, 15:09
0e74322
Код
Авторство
О чём код?
import sqlite3 from random import randint db_name = 'quiz.sqlite' conn = None cursor = None def open(): global conn, cursor conn = sqlite3.connect(db_name) cursor = conn.cursor() def close(): cursor.close() conn.close() def do(query): cursor.execute(query) conn.commit() def clear_db(): ''' убивает все таблицы ''' open() query = '''DROP TABLE IF EXISTS quiz_content''' do(query) query = '''DROP TABLE IF EXISTS question''' do(query) query = '''DROP TABLE IF EXISTS quiz''' do(query) close() def create(): open() cursor.execute('''PRAGMA foreign_keys=on''') do('''CREATE TABLE IF NOT EXISTS quiz ( id INTEGER PRIMARY KEY, name VARCHAR)''' ) do('''CREATE TABLE IF NOT EXISTS question ( id INTEGER PRIMARY KEY, question VARCHAR, answer VARCHAR, wrong1 VARCHAR, wrong2 VARCHAR, wrong3 VARCHAR)''' ) do('''CREATE TABLE IF NOT EXISTS quiz_content ( id INTEGER PRIMARY KEY, quiz_id INTEGER, question_id INTEGER, FOREIGN KEY (quiz_id) REFERENCES quiz (id), FOREIGN KEY (question_id) REFERENCES question (id) )''' ) close() def show(table): query = 'SELECT * FROM ' + table open() cursor.execute(query) print(cursor.fetchall()) close() def show_tables(): show('question') show('quiz') show('quiz_content') def add_questions(): questions = [ ('Сколько месяцев в году имеют 28 дней?', 'Все', 'Один', 'Ни одного', 'Два'), ('Каким станет зеленый утес, если упадет в Красное море?', 'Мокрым?', 'Красным', 'Не изменится', 'Фиолетовым'), ('Какой рукой лучше размешивать чай?', 'Ложкой', 'Правой', 'Левой', 'Любой'), ('Что не имеет длины, глубины, ширины, высоты, а можно измерить?', 'Время', 'Глупость', 'Море', 'Воздух'), ('Когда сетью можно вытянуть воду?', 'Когда вода замерзла', 'Когда нет рыбы', 'Когда уплыла золотая рыбка', 'Когда сеть порвалась'), ('Что больше слона и ничего не весит?', 'Тень слона', 'Воздушный шар', 'Парашют', 'Облако'), ('Что такое у меня в кармашке?', 'Кольцо', 'Кулак', 'Дырка', 'Бублик') ] open() cursor.executemany('''INSERT INTO question (question, answer, wrong1, wrong2, wrong3) VALUES (?,?,?,?,?)''', questions) conn.commit() close() def add_quiz(): quizes = [ ('Викторина 1', ), ('Викторина 2', ), ('Викторина-непоймикакая', ) ] open() cursor.executemany('''INSERT INTO quiz (name) VALUES (?)''', quizes) conn.commit() close() def add_links(): open() cursor.execute('''PRAGMA foreign_keys=on''') query = "INSERT INTO quiz_content (quiz_id, question_id) VALUES (?,?)" answer = input("Добавить связь (y / n)?") while answer != 'n': quiz_id = int(input("id викторины: ")) question_id = int(input("id вопроса: ")) cursor.execute(query, [quiz_id, question_id]) conn.commit() answer = input("Добавить связь (y / n)?") close() def get_question_after(last_id=0, vict_id=1): ''' возвращает следующий вопрос после вопроса с переданным id для первого вопроса передается значение по умолчанию ''' open() query = ''' SELECT quiz_content.id, question.question, question.answer, question.wrong1, question.wrong2, question.wrong3 FROM question, quiz_content WHERE quiz_content.question_id == question.id AND quiz_content.id > ? AND quiz_content.quiz_id == ? ORDER BY quiz_content.id ''' cursor.execute(query, [last_id, vict_id] ) result = cursor.fetchone() close() return result def get_quises(): ''' возвращает список викторин (id, name) можно брать только викторины, в которых есть вопросы, но пока простой вариант ''' query = 'SELECT * FROM quiz ORDER BY id' open() cursor.execute(query) result = cursor.fetchall() close() return result def check_answer(q_id, ans_text): query = ''' SELECT question.answer FROM quiz_content, question WHERE quiz_content.id = ? AND quiz_content.question_id = question.id ''' open() cursor.execute(query, str(q_id)) result = cursor.fetchone() close() # print(result) if result is None: return False # не нашли else: if result[0] == ans_text: # print(ans_text) return True # ответ совпал else: return False # нашли, но ответ не совпал def get_quiz_count(): ''' необязательная функция ''' query = 'SELECT MAX(quiz_id) FROM quiz_content' open() cursor.execute(query) result = cursor.fetchone() close() return result def get_random_quiz_id(): query = 'SELECT quiz_id FROM quiz_content' open() cursor.execute(query) ids = cursor.fetchall() rand_num = randint(0, len(ids) - 1) rand_id = ids[rand_num][0] close() return rand_id def main(): clear_db() create() add_questions() add_quiz() show_tables() add_links() show_tables() # print(get_question_after(0, 3)) # print(get_quiz_count()) # print(get_random_quiz_id()) pass if __name__ == "__main__": main()