Python基于SQLite实现通讯录模糊查询与增删功能
本文介绍如何使用Python内置的sqlite3模块构建一个命令行通讯录系统。系统支持联系人信息的添加、删除及查询功能,核心亮点在于实现了单输入口的智能识别机制,自动区分姓名与电话号码,并支持基于LIKE语句的模糊查询与精确匹配,为轻量级数据存储应用提供参考。
需求概述
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
数据库选型:SQLite3
Python标准库中内置了轻量级关系型数据库sqlite3,该数据库使用SQL语言作为操作接口。作为后端数据库,sqlite3可与Python结合用于构建网站或开发具有数据存储需求的应用工具。此外,sqlite3在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编写通讯录并通过数据库存储实现模糊查询功能的具体方法,希望能为读者提供有益的帮助。如有任何疑问,欢迎留言交流,作者将及时回复。感谢大家对本站的支持! 若本文对您有帮助,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









