python学习SQLite数据库例题——python学习无界面版简易通讯录
《中学生可以这样学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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01