Ты бы не об каких-то там функциях думал, а хотя бы о базовой оптимизации кода. Например: ты 7 раз делаешь
execute
и
commit
, это при том что функций у тебя толком то и нет. А дальше что? Сотню раз по всему коду будешь повторять одни и те же строки? Почитай про
DRY. Простейший пример:
class sql_wrapper:
def __init__(self):
self.connection = sqlite3.connect('foo.db')
self.cursor = self.connection.cursor()
def select(self, sql):
return self.cursor.execute(sql)
def execute(self, sql):
self.cursor.execute(sql)
self.connection.commit()
def close(self):
self.connection.close()
sw = sql_wrapper()
rows = sw.select('SELECT * FROM some_table')
for row in rows:
print(row)
sw.close()
Лапша из
if-else
очень плохо читается и слишком разрастается, лучше каждое действие записывать отдельной функцией, а вызов совершать хотя бы так:
def foo():
print('print foo')
def bar():
print('print bar')
commands = {
'foo': foo, 'bar': bar
}
user_input = input().lower()
if commands.get(user_input, None) is not None:
commands[user_input]()
Уже код будет выглядеть приятнее и более читаемый. Все команды лучше хранить в нижнем регистре и любые принимаемые данные, в том числе ввод с клавиатуры, который касается вызова команд так же переводить в нижний регистр - в будущем избавишься от проблем.
Ну и разберись с SQL, а то похоже, что куски выдраны из разных гайдов, через раз то есть то нет завершающего символа
;
Да и не только с SQL, у тебя через раз то одинарные кавычки для строк, то двойные. Приди уже к единому варианту.