Загрузка данных
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 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()