Форум сайта python.su
0
Здравствуйте уважаемые, я недавно изучаю python и вот поставил себе задачу написать консольный менеджер sqlite(ну или хотя бы попытаюсь) застрял вот на чём:
import sqlite3 import os def menu(): name_base = vhod_bd() col_col = None while True: print("работаем с <<", name_base, ">>") print(""" ================================================ УПРАВЛЕНИЕ БАЗОЙ ДАННЫХ ================================================ 1 - Создание или открытие базы данных 2 - Добавление записей в таблицу 3 - ... 0 - Выход """) response = input("Ввод: ") if response == "1": sozd_db(name_base) elif response == "2": pass elif response == "3": pass elif response == "4": pass elif response == "5": pass elif response == "0": print("Выходим") # доработать break else: print("Что-то не то, попробуйте еще раз.") def vhod_bd(): name_base = input("Введите имя базы данных(если её нет, она будет создана): ") # здесь будет несколько проверок ввода :)(для теста сойдет и так) # проверим существует ли файл базы данных или нет if os.path.exists(name_base): print("База данных <<{0}>> открыта.".format(name_base)) else: print("База данных <<{0}>> создана.".format(name_base)) return name_base # подсоединимся к базе данных def sozd_db(name_base): # подсоединимся к базе conn = sqlite3.connect(name_base) curs = conn.cursor() tblname = input("Введите имя таблицы: ") kol_sbl() stroka_sbl = named_stbl() try: tblcmd = ("create table {0} ({1})".format(tblname, stroka_sbl)) curs.execute(tblcmd) except sqlite3.OperationalError: print("Не получилось") def kol_sbl(): # количество столбцов global col_col while True: try: col_col = int(input("Введите количество столбцов:(не более 10)")) if col_col in range(0, 11): # здесь можно поменять кол-во столбцов print("Количество ячеек: ", col_col) else: print("не то") continue break except ValueError: print("Что-то не то! ") return col_col def named_stbl(): str_pol1 = [] # здесь вводим имена для выбранного количества столбцов for i in range(1, col_col + 1): i = input("Введите имя столбца: ") # data_types() str_pol1.append(i) stro1 = ", ".join(str_pol1) return stro1 def data_types(): # tup = ("NULL", "INTEGER", "REAL", "TEXT", "BLOB") tup1 = None while True: print("""Нажмите <<n>> для выбора типа 'NULL' <<i>> для выбора типа 'INTEGER' <<r>> для выбора типа 'REAL' <<t>> для выбора типа 'TEXT' <<b>> для выбора типа 'BLOB' или <<0>> для отмены""") tup1 = input("....") tup1.lower() if tup1 == "n": print("Вы выбрали тип 'NULL'") tup1 = "NULL" break elif tup1 == "i": print("Вы выбрали тип 'INTEGER'") tup1 = "INTEGER" break elif tup1 == "r": print("Вы выбрали тип 'REAL'") tup1 = "REAL" break elif tup1 == "t": print("Вы выбрали тип 'TEXT'") tup1 = "TEXT" break elif tup1 == "b": print("Вы выбрали тип 'BLOB'") tup1 = "BLOB" break elif tup1 == "0": print("вы не выбрали тип") tup1 = None break else: print("что-то не то") return tup1 def vvod_znach(): col_stbl = None menu()
Отредактировано Yurka (Март 21, 2015 17:59:30)
Офлайн
568
1. Функции - это хорошо, но ООП - лучше. Используйте классы и объекты, они как раз для того и придуманы, чтобы инкапсулировать внутри себя некие действие и относящиеся к ним данные.
2. Не бойтесь словарей!
if response == "1": sozd_db(name_base) elif response == "2": pass elif response == "3":
actions = { "1": func1, "2": func2 }
Отредактировано FishHook (Март 21, 2015 20:23:34)
Офлайн
857
YurkaНужно сделать исполнитель, который умеет открывать базу, создавать таблицу, читать из таблицы, писать в таблицу, проверять наличие таблицы. А потом пишешь функцию, которая с его помощью делает определённый набор действий.
кто подскажет в какую сторону двигаться?
Офлайн
0
Всем спасибо, буду копать в сторону ООП
Офлайн