MySQL实现简单联系人储存程序

 
 
这是一个用Mysql数据库做储存方式的电话姓名管理程序,虽然简陋但是多多少少还是把Mysql的增删改查涵盖了……
OK。来,请看
首先我们先把MySQL和Python的连接过程以及会用到的增删改查都封装一下,这样代码不会显得太乱
而且感觉上去逼格高
import pymysql


class MysqlHelper(object):

    #  初始化Mysq连接参数
    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

    #  连接数据库,成功返回一个connect对象
    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()

            # 发送sql语句
            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()

            # 发送sql语句
            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()

            # sql语句
            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'
    # print(type(mysql.getAll(sql)))
    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')
    # obtain = int(input('请输入选项:'))
    # return obtain
    # try:
    #     obtain = int(input('请输入选项:'))
    #     if isinstance(obtain, int):
    #         return obtain
    #
    # except Exception:
    #     while True:
    #         obtain = int(input('请重新输入选项:'))
    #         if isinstance(obtain, int):
    #             break
    #     return obtain


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('请输入姓名:')

    # # 号码判断
    # while True:
    #     number = input('请输入电话号码:')
    #
    #     # 正则匹配
    #     p = re.compile('^1[3568]\d{9}$|^147\d{8}')
    #     PhonrMatch = p.match(number)
    #
    #     if PhonrMatch:
    #         # params =
    #         break

    # 三元判断成功失败
    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'
        # print('修改成功' if mysql.update(sql, (Mname, Mphone, name))
        #       else mysql.insert('insert into PNumber(pname,number) values(%s,%s)',(Mname,Mphone)))

        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']))

    # else:
    #     sql = 'select pname, number from PNumber limit %s'
    #     resault = mysql.getOne(sql, choice)
    # print('姓名\t\t\t号码')
    # print(resault)
    # for dict in resault:
    # while 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 PhoneName
-- (
-- id int auto_increment primary key not null,
-- pname varchar(20) not null
-- );

# 建立一张电话号码表
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');

-- insert into PhoneName(pname) values('王大锤');
-- insert into PhoneNumber(number) VALUES('12345678901');
-- select pname,number from PhoneNumber t1 inner join PhoneName t2 on t1.id=t2.id limit ;
-- select 1 from PNumber where='骆昊';
-- update PNumber set pname='王大锤' where pname='victor'
-- select pname,number from PNumber limit 4;
select pname,number from PNumber where=%s,()
本是想弄个连接查询表但是觉得有点小题大做,就改成一张表了

猜你喜欢

转载自blog.csdn.net/suvvictor/article/details/80373723