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的内存泄漏及gc模块的使用分析
Jul 16 Python
Python中itertools模块用法详解
Sep 25 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
numpy中loadtxt 的用法详解
Aug 03 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
python中import与from方法总结(推荐)
Mar 21 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
python中68个内置函数的总结与介绍
Feb 24 Python
详解python变量与数据类型
Aug 25 Python
python 下载文件的几种方法汇总
Jan 06 Python
如何在Python中创建二叉树
Mar 30 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代码
2006/12/06 PHP
PHP 中检查或过滤IP地址的实现代码
2011/11/27 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
删除重复数据的算法
2006/11/23 Javascript
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
python实现AES加密解密
2019/03/28 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
python tornado使用流生成图片的例子
2019/11/18 Python
个人廉洁自律承诺书
2014/03/27 职场文书
土地转让协议书
2014/04/15 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
解约证明模板
2015/06/19 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android