#!/usr/bin/env python3 import csv import argparse import re import string from sys import exit import bcrypt from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from models import Base, Student # =========================================================================== # Parse command line options # =========================================================================== argparser = argparse.ArgumentParser(description='Add new student to database or update its password') argparser.add_argument('--db', default='students.db', type=str, help='database filename') argparser.add_argument('uid', type=str, default='', help='Student ID') argparser.add_argument('password', type=str, default='', help='Student password') argparser.add_argument('name', nargs='*', type=str, default='', help='Student name') args = argparser.parse_args() # =======================================================x==================== engine = create_engine(f'sqlite:///{args.db}', echo=False) Base.metadata.create_all(engine) # Criate schema if needed Session = sessionmaker(bind=engine) uid = args.uid password = bcrypt.hashpw(args.password.encode('utf-8'), bcrypt.gensalt()) name = ' '.join(args.name) # --- start db session --- session = Session() u = session.query(Student).get(uid) if u is None: session.add(Student(id=uid, name=name, password=password)) print(f'New user added to "{args.db}".') else: print('Student already exists.') if input(' Update password? [y/n] ') in ('y', 'yes', 'Y', 'Yes', 'YES'): u.password = password print(' Password updated.') else: print(' Nothing done.') session.commit() session.close() # --- end db session ---