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编写通讯录,支持模糊查询,利用数据库存储的更多相关文章

  1. Mybatis中文模糊查询,数据库中有数据,但无结果匹配

    1.Mybatis中文模糊查询,数据库中有数据,但无结果匹配 1.1 问题描述: Mybatis采用中文关键字进行模糊查询,sql语句配置无误,数据库有该数据,且无任何报错信息,但无查询结果 1.2 ...

  2. instr()函数--支持模糊查询

    1)instr()函数的格式  (俗称:字符查找函数) 格式一:instr( string1, string2 )    /   instr(源字符串, 目标字符串) 格式二:instr( strin ...

  3. 10 行 Python 代码写的模糊查询

    导语: 模糊匹配可以算是现代编辑器(在选择要打开的文件时)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的文件名,并提供一个推荐列表供用户选择. 样例如下: Vim (Ctrl-P ...

  4. 支持Oracle的模糊查询和精准查询

    相信所有的软件开发者都做过页面上的查询功能,而且很多都需要既支持模糊查询的,也需要支持精准查询的,而且不需要增加多余的功能,只需要在文本框中输入包含类似*之类的符号即可. 下面的方法就是通过*来判断到 ...

  5. Access数据库的模糊查询到底是用*还是%

    今天被用了一下Access数据库,结果被它的模糊查询给折腾了一上午,到底是用*还是%?特此记下来 事情是这样的,我用C#写了个小的窗体程序,访问Access数据库进行一个模糊查询,我先手工往Acces ...

  6. vue 如何实现 Input 输入框模糊查询方法

    原理:原生js的indexOf() 方法,该方法将从头到尾地检索数组,看它是否含有对应的元素.开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时).如果找到一个 item, ...

  7. 一种安全云存储方案设计(下)——基于Lucene的云端搜索与密文基础上的模糊查询

    一种安全的云存储方案设计(未完整理中) 一篇老文了,现在看看错漏颇多,提到的一些技术已经跟不上了.仅对部分内容重新做了一些修正,增加了一些机器学习的内容,然并卵. 这几年来,云产品层出不穷,但其安全性 ...

  8. easyui combobox模糊查询

    用easyui框架开发的攻城狮恐怕都遇到过这样一个问题,就是在新增页面combobox下拉框需要支持模糊查询,但是输入不是combobox中Data里面的值的时候,点击保存,依然是可以新增进去的,这样 ...

  9. Oracle 模糊查询 优化

    模糊查询是数据库查询中经常用到的,一般常用的格式如下: (1)字段  like '%关键字%'   字段包含"关键字"的记录   即使在目标字段建立索引也不会走索引,速度最慢 (2 ...

随机推荐

  1. JS引用路劲为什么在前面加上两个斜杠

    原文:JS引用路劲为什么在前面加上两个斜杠 //表示同协议,一般现在用在https跨域名地址情况下.比如第三方统计代码的引入,用//就不用很麻烦地区分https还是http,也不用担心https下降到 ...

  2. 十个 Web 开发者熟悉的经典开源项目和工具

    摘要: 一个都不知道的算我输! 这篇文章主要列出了曾经乃至现在都十分受 Web 开发者欢迎的开源工具,相信使用开源工具的 Web 开发者会对它们感兴趣的,它们中有的甚至诞生十多年了,但仍然在发光发热. ...

  3. 【Windows10 IoT开发系列】开发人员模式设置

    原文:[Windows10 IoT开发系列]开发人员模式设置  声明:本文转自微软Windows 开发人员中心(https://msdn.microsoft.com/library/windows/ ...

  4. 程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)

    TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff); procedure ShutDown(sdStatus : TShutDown ...

  5. 解决xp越来越慢的办法(其中有些自动备份的功能)

    1.减少磁盘空间占用2.终止不常用的系统服务3.安全问题4.另外一些技巧 首先问一下,你是不是很想激活XP,不...准确的说你是不是想在ms的站上能够升级.如果答案是肯定的话,那我们就先来探讨一下安装 ...

  6. Qt5.5.0在Linux下静态编译(加上-fontconfig编译项才能显示中文) good

    测试系统环境:Ubuntu12.04 (32bit/64bit)编译软件环境:QT5.5.0   本文章主要介绍Linux下QT静态编译环境的搭建,以及如何编译我们的程序board_driver. 1 ...

  7. Qt 5 最小构建笔记(只编译QtBase)

    只想用Qt5最基本的功能,因此只编译QtBase.也不想为了编译一个Qt装很多东西(比如非常肥的DirectX SDK) 软件清单: Visual Studio 2010 Professional w ...

  8. QT字符编码转换,可用于中文内码传输

    串口.TCP.UDP传输中文字符时,先将字符串转内码.客户端接收到数据后,将内码转为字符串就OK了 QByteArray CommonFunction::strToInterCode(constQSt ...

  9. BSTR使用误区以及隐藏的内存破坏和内存泄漏

    BSTR使用误区以及隐藏的内存破坏和内存泄漏 作者:magictong 简介 BSTR的数据结构是什么样子并不是本文讨论的问题,但是却是本文的基础.在解决COM的跨平台编程的问题时,需要定义一种通用的 ...

  10. 【Linux】Linux下设备网卡以及硬件管理等

    这是Linux下网络硬件管理的基础知识,虽然平时用到的可能比软件的少一点,但是作为基础命令,还是需要记住,以免用时又得查询. 本文参考官方文档:https://wiki.ubuntu.com.cn/% ...