cuprumvsargetium
@cuprumvsargetium
228

Какой функционал еще можно добавить(Кроме интерфейса)?

spoiler
import sqlite3
conn = sqlite3.connect('date_base.sqlite')
c = conn.cursor()
perehod = 0

def dob(dobname,dobnum):
	c.execute("INSERT INTO " + login + " (name,num) VALUES ('%s','%s')"%(dobname,dobnum))
	conn.commit()

def delete():
	del_chel = input('Кого: ')
	c.execute("DELETE FROM " + login + " WHERE (name) = ('%s');"%(del_chel))
	conn.commit()
#команда вывода одного человека
def people():
	c.execute("SELECT name, num FROM " + login + " WHERE (name) = ('%s');"%(chel))
	conn.commit()
	p = c.fetchone()
	if p == None:
		print('Такого человека нет в списке!')
	else:
		print(" Имя: "+p[0]+" | Номер: "+p[1])
#функция регистраци, создание таблицы
def table_create():
	c.execute('CREATE TABLE ' + name + '( "id"	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"name"	TEXT NOT NULL,"num"	TEXT NOT NULL);')
	conn.commit()
#Функция занесения пользователя в базу
def add_user(username,userpass):
	c.execute("INSERT INTO users (name,password) VALUES ('%s','%s')"%(username,userpass))
	conn.commit()
#функция входа
def enter(loginname,lpass):
		c.execute("SELECT name,password FROM users WHERE (name, password) = ('%s', '%s');"%(loginname, lpass))
		conn.commit()
		lg = c.fetchone()
		lg_2 = lg
		if lg_2 == None:
			a = 'Вход не выполнен'
			print(a)
			print('Не верный Логин или Пароль!')
			exit()
			#print(lg_2)
		else:
			#print(lg_2)

			a = 'Вход выполнен'
			print(a)

#работа
cmd = input('Вход/Регистрация\n')

if cmd == 'Регистрация':
	#Вводим данные
	name = input("Введите Логин\n")
	passwd = input("Введите Пароль\n")
	print('\n')
	#Делаем запрос в базу
	#print("Список пользователей:\n")
	add_user(name,passwd)
	table_create()
	#c.execute('SELECT * FROM users')
	#row = c.fetchone()
	#выводим список пользователей в цикле
	#while row is not None:
		#print("id:"+str(row[0])+" Логин: "+row[1]+" | Пароль: "+row[2])
		#row = c.fetchone()
	print('Войдите в систему')
	login = input('Логин\n')
	l_pass = input('Пароль\n')
	enter(login, l_pass)
	perehod = 1
elif cmd == 'Вход':	
	login = input('Логин\n')
	l_pass = input('Пароль\n')
	enter(login, l_pass)
	perehod = 1

if perehod == 1:
	print('TelephonBook v. Beta 0.1\n')
	k = 1
	while k > 0:
		comand = input('Введите команду: ')
		if comand == 'Всё':
			c.execute('SELECT * FROM ' + login)
			row = c.fetchone()
			while row is not None:
				print(" Имя: "+row[1]+" | Номер: "+row[2])
				row = c.fetchone()
		elif comand == 'Человек':
			chel = input('Введите Имя: ')
			people()
		elif comand == 'Редакт':
			redact = input('Удалить/Добавить')
			if redact == 'Удалить':
				c.execute("SELECT name FROM " + login)
				pokaz = c.fetchone()
				print(" Имя: "+pokaz[0])
				delete()
			elif redact == 'Добавить':
				name_r = input('Имя: ')
				num_r = input('Номер: ')
				dob(name_r,num_r)
				c.execute('SELECT * FROM ' + login)
				conn.commit()
				ro = c.fetchone()
				while ro is not None:
					print(" Имя: "+ro[1]+" | Номер: "+ro[2])
					ro = c.fetchone()
		elif comand == 'exit':
			print('exit')
			exit()
		else:
			print('Команды не существует')
print('Ничего не выбрано, или не правильная команда')
print('Пока!')
# закрываем соединение с базой
c.close()
conn.close()
exit()
  • Вопрос задан
  • 121 просмотр
Решения вопроса 3
Перестать хранить пароль в БД в открытом виде. Сохранять только хеш
Ответ написан
kshnkvn
@kshnkvn Куратор тега Python
t.me/kshnkvn
Ты бы не об каких-то там функциях думал, а хотя бы о базовой оптимизации кода. Например: ты 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, у тебя через раз то одинарные кавычки для строк, то двойные. Приди уже к единому варианту.
Ответ написан
adugin
@adugin Куратор тега Python
Монетизацию, конечно же
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
17 февр. 2020, в 00:30
1500 руб./за проект
16 февр. 2020, в 22:28
2000 руб./за проект
16 февр. 2020, в 22:03
1200 руб./в час