Python编写通讯录通过数据库存储实现模糊查询功能


Posted in Python onJuly 18, 2019

1.要求

数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询。

2.实现功能

可通过输入指令进行操作。

(1)首先输入“add”,可以对通讯录进行添加联系人信息。

sql1 =
'insert into TA(ID,NAME,AGE,ADDRESS,TELENUMBER)'
sql1 += 'values("%d","%s","%d","%s","%s");' % (ID,name, age, address, telenumber)
conn.execute(sql1)
conn.commit() # 提交,否则无法保存

(2)输入“delete”,可以删除指定的联系人信息。

输入姓名删除:

cursor = c.execute( "SELECT name from TA where name = '%s';" %i)

输入电话号码删除:

cursor = c.execute( "SELECT name from TA where telenumber= '%s';" % i)

(3)输入“search”,可以输入联系人或者电话号码,查询联系人信息,这里实现了模糊查询以及精确查询。

输入姓名查询:

sql1 = "SELECT id,name,age, address, telenumber from TA where telenumber like '%" + i +
"%'"
cursor = c.execute(sql1)

输入电话号码查询:

sql1= "SELECT id,name,age, address, telenumber from TA where name like '%" +i+
"%'"
cursor = c.execute(sql1)

(4)输入“searchall”,查询全部联系人信息。

cursor = c.execute( "SELECT id, name, age, address, telenumber from TA" )

3.数据库sqlite3

Python自带一个轻量级的关系型数据库sqlite。这一数据库使用SQL语言。sqlite作为后端数据库,可以搭配Python建网站,或者制作有数据存储需求的工具。sqlLite还在其它领域有广泛的应用,比如HTML5和移动端。Python标准库中的sqlite3提供该数据库的接口。因此此次使用了sqlite3数据库存储通讯录的联系人信息。

源码:

import sqlite3
import re
#打开本地数据库用于存储用户信息
conn = sqlite3.connect('mysql_telephone_book.db')
c = conn.cursor()
#在该数据库下创建表,创建表的这段代码在第一次执行后需要注释掉,否则再次执行程序会一直提示:该表已存在
'''c.execute("CREATE TABLE TA
    (ID INT PRIMARY KEY   NOT NULL,
    NAME      TEXT  NOT NULL,
    AGE      INT   NOT NULL,
    ADDRESS    CHAR(50),
    TELENUMBER     TEXT);")'''

conn.commit()#提交当前的事务
#增加用户信息
def insert():
  global conn
  c = conn.cursor()
  ID=int(input("请输入id号:"))
  name=input("请输入姓名:")
  age=int(input("请输入年龄:"))
  address=input("请输入地址:")
  telenumber=input("请输入电话号码:")
  sql1 = 'insert into TA(ID,NAME,AGE,ADDRESS,TELENUMBER)'
  sql1 += 'values("%d","%s","%d","%s","%s");' % (ID,name, age, address, telenumber)
  conn.execute(sql1)
  conn.commit()#提交,否则无法保存
  print("提交成功!!")
#删除用户信息
def delete():
  global conn
  c=conn.cursor()
  i = input("请输入所要删除的联系人姓名或电话号码:")
  if len(i) < 11:
    cursor = c.execute("SELECT name from TA where name = '%s';"%i)
    for row in cursor:
      if i == row[0]:
        c.execute("DELETE from TA where name ='%s';"%i)
        conn.commit()
        print("成功删除联系人信息!!")
        break
    else:
      print("该联系人不存在!!")
  else :
    cursor = c.execute("SELECT name from TA where telenumber= '%s';" % i)
    for row in cursor:
      if i == row[0]:
        c.execute("DELETE from TA where telenumber ='%s';" % i)
        conn.commit()
        print("成功删除联系人信息!!")
        break
    else:
      print("该电话号码错误!!")
#查询用户信息
def search():
  global conn
  c = conn.cursor()
  i = input("请输入所要查询的联系人姓名或电话号码:")
  if i.isnumeric():
    sql1 = "SELECT id,name,age, address, telenumber from TA where telenumber like '%" + i + "%'"
    cursor = c.execute(sql1)
    res=cursor.fetchall()
    if len(res)!=0:
      for row in res:
        print("id:{0}".format(row[0]))
        print("姓名:{0}".format(row[1]))
        print("年龄:{0}".format(row[2]))
        print("地址:{0}".format(row[3]))
        print("电话号码:{0}".format(row[4]))
    else:
      print("无此电话号码!!")
  else:
    sql1="SELECT id,name,age, address, telenumber from TA where name like '%"+i+"%'"
    cursor = c.execute(sql1)
    res=cursor.fetchall()
    if len(res) == 0:
      print("该联系人不存在!!")
    else:
      for row in res:
        print("id:{0}".format(row[0]))
        print("姓名:{0}".format(row[1]))
        print("年龄:{0}".format(row[2]))
        print("地址:{0}".format(row[3]))
        print("电话号码:{0}".format(row[4]))
#显示所有用户信息
def showall():
  global conn
  c = conn.cursor()
  cursor = c.execute("SELECT id, name, age, address, telenumber from TA")
  for row in cursor:
    print("id:{0}".format(row[0]))
    print("姓名:{0}".format(row[1]))
    print("年龄:{0}".format(row[2]))
    print("地址:{0}".format(row[3]))
    print("电话号码:{0}".format(row[4]))
print("指令如下:\n1.输入\"add\"为通讯录添加联系人信息\n2.输入\"delete\"删除通讯录里的指定联系人信息 \n3.输入\"searchall\"查询通讯录里的所有用户 \n4.输入\"search\"根据姓名或手机号码查找信息 ")
while 1:
  temp = input("请输入指令:")
  if temp == "add":
    insert()
    print("添加成功!")
    temp1=input("是否继续操作通讯录?(y or n)")
    if temp1=="n":
      print("成功退出!!")
      break
    else:
      continue
  elif temp=="delete":
    delete()
    temp1 = input("是否继续操作通讯录?(y or n)")
    if temp1 == "n":
      print("成功退出!!")
      break
    else:
      continue
  elif temp=="searchall":
    showall()
    temp1 = input("是否想继续操作通讯录?(y or n)")
    if temp1 == "n":
      print("成功退出!!")
      break
    else:
      continue
  elif temp=="search":
    search()
    temp1 = input("您是否想继续操作通讯录?(y or n)")
    if temp1 == "n":
      print("成功退出!!")
      break
    else:
      continue
  else:
    print("请输入正确指令!!")
conn.close()#关闭数据库

总结

以上所述是小编给大家介绍的Python编写通讯录通过数据库存储实现模糊查询功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python中定义结构体的方法
Mar 04 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
python实现按行切分文本文件的方法
Apr 18 Python
Python实现的rsa加密算法详解
Jan 24 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
python2.7安装图文教程
Mar 13 Python
对python requests的content和text方法的区别详解
Oct 11 Python
python三引号输出方法
Feb 27 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
PyTorch预训练的实现
Sep 18 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
Django 实现图片上传和显示过程详解
Jul 18 #Python
Django框架模型简单介绍与使用分析
Jul 18 #Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 #Python
django 2.2和mysql使用的常见问题
Jul 18 #Python
详解Python二维数组与三维数组切片的方法
Jul 18 #Python
Django框架视图介绍与使用详解
Jul 18 #Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 #Python
You might like
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
基于文本的搜索
2006/10/09 PHP
简单的PHP图片上传程序
2008/03/27 PHP
PHP小程序自动提交到自助友情连接
2009/11/24 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
js 走马灯简单实例
2013/11/21 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
美国旅游网站:Tours4Fun
2017/02/17 全球购物
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
销售团队口号大全
2014/06/06 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
纪律委员竞选稿
2015/11/19 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫
「月刊Action」2022年5月号封面公开
2022/03/21 日漫