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 相关文章推荐
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
使用 Python 实现微信公众号粉丝迁移流程
Jan 03 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
利用nohup来开启python文件的方法
Jan 14 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
python循环定时中断执行某一段程序的实例
Jun 29 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
Django解决frame拒绝问题的方法
Dec 18 Python
python 下载文件的几种方法汇总
Jan 06 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
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
php写的AES加密解密类分享
2014/06/20 PHP
php常见的魔术方法详解
2014/12/25 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
python绘制多个曲线的折线图
2020/03/23 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
2019/05/30 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
北大自主招生自荐信
2013/10/19 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
讲文明倡议书
2015/04/29 职场文书
诚实守信主题班会
2015/08/13 职场文书
个人向公司借款协议书
2016/03/19 职场文书
解决Redis启动警告问题
2022/02/24 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis