• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

python学习SQLite数据库例题——python学习无界面版简易通讯录

武飞扬头像
anITfish
帮助3

《中学生可以这样学Python》P204-208

无界面版简易通讯录

#无界面版简易通讯录 使用SQLite数据库存储数据
#每个人的记录包含姓名 性别 年龄 部门名称 手机号 QQ号
import sqlite3

def menu():
    '''本函数用来显示主菜单'''
    usage=('\tL/1:列出所有信息。',
           '\tD/d:删除信息。',
           '\tA/a:添加新信息。',
           '\tQ/q:退出系统',
           '\tH/h:帮助,显示命令。')
    print('主菜单'.center(70,'='))
    for u in usage:
        print(u)
def doSql(sql):
    '''用来执行SQL语句,尤其是INSERT和DELETE语句'''
    conn=sqlite3.connect('data.db')
    cur=conn.cursor()
    cur.execute(sql)
    conn.commit()
    conn.close()
def add():
    '''本函数用来接收用户输入 检查格式 然后插入数据库'''
    print('添加记录'.center(70,'='))
    #获取输入 只接受正确格式的数据
    while True:
        record=input('请输入姓名、性别、年龄、部门名称、手机号、QQ号(输入Q/q回车结束):\n')
        if record in ('q','Q'):
            print('\t你停止了插入记录,返回主菜单')
            return
        #正确的格式应该恰好包含5个英文逗号
        if record.count(' ')!=5:
            print('格式或数据错误')
            continue
        else:
            #print(record.split(' '))
            name,sex,age,department,telephone,qq=record.split(' ')
            #性别必须是F或M
            if sex not in ('男','女'):
                print('性别必须输入男或女。')
                continue
            #手机号和qq必须是数字字符串
            if (not telephone.isdigit()) or (not qq.isdigit()):
                print('手机号和QQ号必须是数字。')
                continue
            #年龄必须是介于1-130的整数
            try:
                age=int(age)
                if not 1<=age<=130:
                    print('年龄必须介于1到130。')
                    continue
            except:
                print('年龄必须为整数')
                continue
        #sql='INSERT INTO addressList(name,sex,age,department,telephone,qq) VALUES(' name ',' sex ',' str(age) ',' department ',' telephone ',' qq ')'
        sql="INSERT INTO addressList(name,sex,age,department,telephone,qq) VALUES('{}','{}','{}','{}','{}','{}')".format(name,sex,str(age),department,telephone,qq)
        #sql='''INSERT INTO addressList(name,sex,age,department,telephone,qq) VALUES('王五','男','4','保安','33333333333','33333333')'''
        doSql(sql)
        '''
        conn=sqlite3.connect('data.db')
        cur=conn.cursor()
        cur.execute('INSERT INTO addressList(name,sex,age,department,telephone,qq) VALUES(?,?,?,?,?,?)',(name,sex,age,department,telephone,qq))
        conn.commit()
        conn.close()
        '''
        print('你添加了一条记录')
def exist(recordId):
    '''本函数用来测试数据表中是否存在recordId的id'''
    conn=sqlite3.connect('data.db')
    cur=conn.cursor()
    cur.execute('SELECT COUNT(id) from addressList where id=' str(recordId))
    c=cur.fetchall()
    #print(c[0][0])
    conn.close()
    return c[0][0]

def remove():
    '''本函数用来接收用户输入的id号,并删除数据库中该id对应的记录'''
    print('删除记录'.center(70,'='))
    while True:
        #输入q或Q,返回上一级目录
        x=input('请输入要删除记录的id号(输入Q/q回车结束):')
        if x in ('q','Q'):
            print('你已停止删除')
            return
        #要删除的id必须是数字 并且已存在于数据库中
        
        try:
            recordId=int(x)            
            #sql='DELETE FROM addressList WHERE id=' x
            #doSql(sql)
            #print('你已删除该记录{}'.format(x))
            
            if not exist(recordId):
                print('要删除的记录id不存在。')
            else:
                sql='DELETE FROM addressList WHERE id=' x
                doSql(sql)
                print('你已删除该记录{}'.format(x))           
        except:
            print('id必须为整数')
            
def listInformation():
    '''本函数用来查看所有记录'''
    sql='SELECT * FROM addressList ORDER BY id ASC'
    conn=sqlite3.connect('data.db')
    cur=conn.cursor()
    cur.execute(sql)
    result=cur.fetchall()
    if not result:
        print('数据库内暂无数据')
    else:
        #格式化输出所有记录
        print('所有记录如下:'.center(70,'='))
        print('{}{}{}{}{}{}{}'.format('ID'.ljust(6),'姓名'.ljust(8),'性别'.ljust(5),'年龄'.ljust(5),'部门名称'.ljust(10),'手机号'.ljust(13),'QQ号'.ljust(6)))
        for record in result:
            print(str(record[0]).ljust(6),end='')#id
            print(record[1].ljust(8),end='')#姓名
            print(record[2].ljust(6),end='')#性别
            print(str(record[3]).ljust(6),end='')#年龄
            print(record[4].ljust(10),end='')#部门名称
            print(record[5].ljust(13),end='')#手机号
            print(record[6])#QQ号
        print('='*30)
    conn.close()

def main():
    '''系统主函数'''
    print('欢迎进入简易通讯录')
    menu()
    while True:
        command=input('请选择一个命令:')
        if command in ('L','l'):
            listInformation()
        elif command in('D','d'):
            remove()
            menu()
        elif command in('A','a'):
            add()
            menu()
        elif command in('Q','q'):
            break
        elif command in ('H','h'):
            menu()
        else:
            print('你输入了一个非法命令')
def makeBiao():
    '''创建表addressList'''
    sql='CREATE TABLE addressList(id INTEGER PRIMARY KEY autoincrement,name TEXT,sex TEXT,age NUMERIC,department TEXT,telephone TEXT,qq TEXT)'
    conn=sqlite3.connect('data.db')
    cur=conn.cursor()
    cur.execute(sql)
#调用主函数 启动系统
try:
    makeBiao()
except:
    pass

main()   

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhehcf
系列文章
更多 icon
同类精品
更多 icon
继续加载