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动态参数用法实例分析
May 25 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
python机器学习之神经网络实现
Oct 13 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
Python闭包思想与用法浅析
Dec 27 Python
flask框架路由常用定义方式总结
Jul 23 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
django中嵌套的try-except实例
May 21 Python
Python getsizeof()和getsize()区分详解
Nov 20 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
深入array multisort排序原理的详解
2013/06/18 PHP
PHP+ajax实现二级联动菜单功能示例
2018/08/10 PHP
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
俄语专业毕业生推荐信
2013/10/28 职场文书
广告宣传策划方案
2014/05/21 职场文书
社区反邪教工作方案
2014/06/16 职场文书
经营理念口号
2014/06/21 职场文书
护士节活动总结
2014/08/29 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
见习期个人总结
2015/03/05 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
新学期开学标语2015
2015/07/16 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
一行Python命令实现批量加水印
2022/04/07 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python