这是一个用Mysql数据库做储存方式的电话姓名管理程序,虽然简陋但是多多少少还是把Mysql的增删改查涵盖了……
OK。来,请看
首先我们先把MySQL和Python的连接过程以及会用到的增删改查都封装一下,这样代码不会显得太乱
而且感觉上去逼格高
import pymysql
class MysqlHelper(object):
def __init__(self, host='', user='', passwd='', db='', charset='utf8', port=3306):
self._host = host
self._user = user
self._passwd = passwd
self._db = db
self._charset = charset
self._port = port
def connect(self):
self._conn = pymysql.connect(
host=self._host,
user=self._user,
passwd=self._passwd,
db=self._db,
charset=self._charset,
port=self._port,
cursorclass=pymysql.cursors.DictCursor
)
self._cursor = self._conn.cursor()
def close(self):
self._cursor.close()
self._conn.close()
def __edit(self, sql, params=()):
resault = 0
try:
self.connect()
resault = self._cursor.execute(sql, params)
self._conn.commit()
self.close()
except Exception as e:
self._conn.rollback()
print(e)
return resault
def insert(self, sql, params=()):
return self.__edit(sql, params)
def delete(self, sql, params=()):
return self.__edit(sql, params)
def update(self, sql, params=()):
return self.__edit(sql, params)
def getOne(self, sql, params=()):
resault = None
try:
self.connect()
self._cursor.execute(sql, params)
resault = self._cursor.fetchone()
self.close()
except Exception as e:
print(e)
return resault
def getAll(self, sql, params=()):
resault = ()
try:
self.connect()
self._cursor.execute(sql, params)
resault = self._cursor.fetchall()
self.close()
except Exception as e:
print(e)
return resault
好,搞完这些其他的就不足为虑了……
现在我们开始写程序
来,请看
from MysqlToPython.MySQL import MysqlHelper
import re
def display(mysql):
print('--- 欢迎使用 ---')
sql = 'select pname,number from PNumber limit 0, 10'
resault = mysql.getAll(sql)
if resault:
print('姓名\t\t\t电话')
for dict in resault:
print('%s\t\t%s' % (dict['pname'], dict['number']))
else:
print('当前无任何电话记录')
def printMenu():
print('+' * 30)
print('添加记录:1')
print('删除记录:2')
print('修改记录:3')
print('查询记录:4')
print('退出系统:0')
def Verification():
while True:
Mphone = input('请输入此联系人的新号码:')
p = re.compile('^1[3568]\d{9}$|^147\d{8}')
PhonrMatch = p.match(Mphone)
if PhonrMatch:
break
return PhonrMatch
def MysqlAdd(mysql):
sql = 'insert into PNumber(pname,number) values(%s,%s)'
name = input('请输入姓名:')
print('添加成功' if mysql.insert(sql, (name, int(Verification().group()))) == 1 else '添加失败')
def MysqlDel(mysql):
name = input('请输入您要删除联系人的姓名:')
sql = 'delete from PNumber where pname=%s'
print('删除成功' if mysql.delete(sql, name) == 1 else '删除成功')
def MysqlMod(mysql):
name = input('请输入您要更新联系人的姓名:')
choice = int(input('修改姓名:1 , 修改号码:2 , 修改两者:3 。请输入您的选项: '))
if choice == 1:
Mname = input('请输入此联系人的新姓名:')
sql = 'update PNumber set pname=%s where pname=%s'
print('修改成功' if mysql.update(sql, (Mname, name)) else '修改失败')
elif choice == 2:
Mphone = input('请输入此联系人的新号码:')
sql = 'update PNumber set number=%s where pname=%s'
print('修改成功' if mysql.update(sql, (Verification().group(), name)) else '修改失败')
elif choice == 3:
Mname = input('请输入此联系人的新姓名:')
sql = 'update PNumber set pname=%s, number=%s where pname=%s'
if mysql.update(sql, (Mname, Verification().group(), name)):
print('修改成功')
else:
mysql.insert('insert into PNumber(pname,number) values(%s,%s)', (Mname, Mphone))
print('查无此人但已添加')
def getInfo(mysql):
choice = input('查看全部输入0, 查看指定联系人输入其姓名。请输入: ')
if choice == '0':
sql = 'select pname, number from PNumber'
resault = mysql.getAll(sql)
else:
sql = 'select pname,number from PNumber where pname=%s'
resault = mysql.getAll(sql, (choice,))
print('姓名\t\t\t号码')
for dict in resault:
print('%s\t\t%s' % (dict['pname'], dict['number']))
def main():
mysql = MysqlHelper(host='localhost',
user='root',
passwd='victor',
db='MyPhone'
)
display(mysql)
printMenu()
while True:
print()
obtain = int(input('请输入选项:'))
if obtain == 1:
MysqlAdd(mysql)
elif obtain == 2:
MysqlDel(mysql)
elif obtain == 3:
MysqlMod(mysql)
elif obtain == 4:
getInfo(mysql)
elif obtain == 0:
break
if __name__ == '__main__':
main()
其实程序本身并不复杂就是连接MySQL和Python可能会出点问题,另外这个程序如果用Redis会十分简便并且运行效率也不会差,如果下午有时间会写一下。现在先把这个贴出来,还有SQL建表语句。
# 先建立一个数据库
create database MyPhone default charset=utf8;
# 进入数据库
use MyPhone;
# 建立一张电话号码表
create table PNumber
(
id int auto_increment primary key not null,
pname varchar(20) not null,
number varchar(11) not null
);
insert into PNumber values(0,'王大锤','12334566');
select pname,number from PNumber where=%s,()
本是想弄个连接查询表但是觉得有点小题大做,就改成一张表了