python之数据库的简单交互

看本文前首先
1、对python的类的简单应用,有所了解
2、会一点数据库的CRUD(就是增删改查)

首先使用MySQL,里面创建一个叫waterDB的数据库,在库里创建一个叫customer的表,表的格式如下:
这里写图片描述
表的数据如下:
这里写图片描述

下面来实现python与数据库的交互,我们通过面向对象的方式来实现:

#我们想实现以下功能:
                    # 登陆
                    # 注册
                    # 退出
                    # 显示用户


import pymysql   #导入这个包,用于与数据库交互

class TaoBao(object):      #面向对象就是通过类来实现的,万物皆对象
    def __init__(self):    #初始化
        # 数据库的链接     pysql.connect()连接数据库   随意设置一个,指代连接的数据库的名字---con
        self.con = pymysql.connect(host='localhost', user='root', password='mysql', database='waterDB', port=3306,
                              charset='utf8')
        # 操作对象     随意设置一个,指代con.cursor()这个操作方法 的名字----cur
        self.cur = self.con.cursor()
        #设置一个标注登陆
        self.flag = 0

    def show_menu(self):
        print('-'*30)
        print('-------1登陆------')
        print('-------2注册------')
        print('-------3退出------')
        print('-------4显示所有------')
        print('-------5新建表-------')
        print('-------6删除表-------')

    def run(self):
        while True:
            self.show_menu()
            num = input('请输入操作选择:')
            if num == '1':
                self.login()
            elif num=='4':
                self.show_all()
            elif num =='2':
                self.register()
            elif num=='5':
                self.creat_table()
            elif num =='6':
                self.del_table()

    def creat_table(self):
        table_name = input('请输入新建的表的名字:')
        ret = self.cur.execute('create table %s(id int primary key auto_increment not null,phone varchar(20) not null,cur_id int)'%table_name)
        #execute() 里面写sql操作
        self.con.commit()
        #commit()手动提交事务
        print('创建表成功')

    def del_table(self):
        table_name = input('请输入删除的表的名字:')
        ret = self.cur.execute('drop table %s'%table_name)
        self.con.commit()
        print('删除表成功')

    def login(self):
        name = input('请输入用户名:')
        password = input('请输入密码:')
        sql = 'select * from customer where user_name=%s and password=%s'
        ret = self.cur.execute(sql,[name,password])  #参数列表化,是为了防止sql注入
        #ret 表示影响了多少条数据
        if ret==0:
            print('用户名或者密码错误')
            return
        self.flag = 1   #表示登录成功

    def register(self):
        name = input('输入用户名:')
        mima = input('输入密码:')
        email = input('输入邮箱:')
        gender = input('输入性别:')
        sql = 'insert into customer values(%s,%s,%s,%s,%s)'
        ret = self.cur.execute(sql,[0,name,mima,gender,email]) #这里的0是占位用的,数据库的表里0所占列是id,id我们已经设置格式为自动增加,所以只要帮他占个位就可以了
        self.con.commit()
        print('新增数据成功')

    def show_all(self):
        if self.flag==1:
            sql = 'select * from customer'
            self.cur.execute(sql)
            print(self.cur.fetchall())

    def __del__(self):
        self.cur.close()
        self.con.close()


if __name__ == '__main__':
    taobao = TaoBao()
    taobao.run()

注意:如何避免sql注入?
两个简单的方法:1、配合execute,列表化参数
2、正则匹配

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值