看本文前首先
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、正则匹配