1. file_exis - плохое именование (не буду повторяться)
2. "Контакты.txt" - Хардкод
3. os.chmod - не ясно, зачем.
4.
if not database_exis:
cursor.execute("""CREATE TABLE contacts
(name text, phone_number text)""")
Не ясно что этот код должно делать (стоит вынести в функцию) и есть ощущение, что его не тестировали, тк database_exis проверяет наличие файла, а не БД в файле.
5. viewByName - неоднородный кодстайл. если пишешь в stake-case, то пиши и название функций в snake_case и наоборот.
6. command_check - плохое название функции. Подобные функции должны ничанаться с глагола
7.
if command == "viewByName":
viewByName()
print()
elif command == "viewByNum":
- Дублирование кода, хардкод, нарушение SRP. Имеет смысл сделать словарь. и декомпозировать функцию на несколько.
8.
print("viewByName - для просмотра контакта(по имени) \n"
"viewByNum - для просмотра контакта(по номеру) \n"
"add - для добавления контакта \n"
"change - для изменения контакта \n"
"delete - для удаления контакта \n"
"num - количество контактов в книге \n"
"exit - для выхода из программы")
А вот и второй дубль
Из-за \n скрипт не кроссплатформенный. Лучше использовать платформозависимый перенос строки.
9. print() ради переноса строки мне не нравится, но возможно в питоне так принято, так что не буду сильно придираться.
10. viewByName(): и другие.
Нарушение SRP и дублирование кода