2019-03-14

1、整理今天所学的知识点

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

1.类的封装

import pymysql

class MysqlHelper:

    """pymysql助手类"""

    def __init__(self, host, database, user, password, port=3306, charset='utf8'):

        """初始化参数"""

        self.host = host

        self.port = port

        self.database = database

        self.user = user

        self.password = password

        self.charset = charset

    def connect(self):

        """初始化连接对象和执行对象"""

        self.conn = pymysql.connect(host=self.host, port=self.port,

                                    database=self.database, user=self.user,

                                    password=self.password,

                                    charset=self.charset)

        self.cursor = self.conn.cursor()

    def close(self):

        """关闭"""

        self.cursor.close()

        self.conn.close()

    def select_one(self, sql, params=[]):

        """查询单个"""

        result = None

        try:

            self.connect()

            self.cursor.execute(sql, params)

            result = self.cursor.fetchone()

            print(result)

            self.close()

        except Exception as e:

            print('error',e)

        return result

    def select_all(self, sql, params=[]):

        """查询多个"""

        result = ()

        try:

            self.connect()

            self.cursor.execute(sql, params)

            result = self.cursor.fetchall()

            self.close()

        except Exception as e:

            print(e)

        return result

    def __edit(self, sql, params):

        """增删改"""

        count = 0

        try:

            self.connect()

            count = self.cursor.execute(sql, params)

            self.conn.commit()

            self.close()

        except Exception as e:

            print(e)

        return count

    def insert(self, sql, params=None):

        """新增"""

        return self.__edit(sql, params)

    def update(self, sql, params=None):

        """修改"""

        return self.__edit(sql, params)

    def delete(self, sql, params=None):

        """删除"""

        return self.__edit(sql, params)

def f1():

    # 1、创建对象

    helper = MysqlHelper(host='192.168.0.138', user='root', password='root', database='mydb')

    # 2、调用功能:查询

    ret = helper.select_one('select * from student where id=%s', [1])

    print(ret)

def f2():

    # 1、创建对象

    helper = MysqlHelper(host='192.168.0.138', user='root', password='root', database='mydb')

    # 2、调用功能:删除

    ret = helper.delete('delete from student')

    print(ret)

def f3():

    # 1、创建对象

    helper = MysqlHelper(host='192.168.0.138', user='root', password='root', database='mydb')

    # 2、调用功能:删除

    ret = helper.insert('insert into student(name,pwd,hiredate,addres) VALUE ("laowang","123456","1996-10-28","uu")')

    print(ret)

def f4():

    # 1、创建对象

    helper = MysqlHelper(host='192.168.0.138', user='root', password='root', database='mydb')

    # 2、调用功能:查询

    ret = helper.select_all('select * from student')

    for row in ret:

        print(row)

def f5():

    # 1、创建对象

    helper = MysqlHelper(host='192.168.0.138', user='root', password='root', database='mydb')

    # 2、调用功能:查询

    ret = helper.update('update student set name = "小明" where id = 1')

    print(ret)

if __name__ == '__main__':

  f1()

  # f2()

  # f3()

  # f4()

  # f5()

、、、、、、、、、、、、、、、、、、、、、、、、、

2.加密

• 注意:需要对密码进行加密

• 如果使用md5加密,则密码包含32个字符

• 如果使用sha1加密,则密码包含40个字符,这里使用这种方式


、、、md5加密方式:

import hashlib

pwd = '123456'

my_md5 = hashlib.md5()

my_md5.update(pwd.encode('utf-8'))

print(my_md5.hexdigest())

sha1加密方式:

import hashlib

pwd = '123456'

my_sha1 = hashlib.sha1(pwd.encode('utf-8'))

print(my_sha1.hexdigest())

创建表

create table userinfos(

id int primary key auto_increment,

uname varchar(20),

upwd char(40),

isdelete bit default 0

);

加入测试数据

• 插入如下数据,用户名为123,密码为123,这是sha1加密后的值

insert into userinfos values(0,'123','40bd001563085fc35165329ea1ff5c5ecbdbbeef',0);

接收输入并验证

• 创建testLogin.py文件,引入hashlib模块、MysqlHelper模块

• 接收输入

• 根据用户名查询,如果未查到则提示用户名不存在

• 如果查到则匹配密码是否相等,如果相等则提示登录成功

• 如果不相等则提示密码错误

#encoding=utf-8

from MysqlHelper import MysqlHelper

from hashlib import sha1

sname=input("请输入用户名:")

spwd=input("请输入密码:")

s1=sha1()

s1.update(spwd)

spwdSha1=s1.hexdigest()

sql="select upwd from userinfos where uname=%s"

params=[sname]

sqlhelper=MysqlHelper('localhost',3306,'test1','root','mysql')

userinfo=sqlhelper.get_one(sql,params)

if userinfo==None:

    print('用户名错误')

elif userinfo[0]==spwdSha1:

    print('登录成功')

else:

    print('密码错误')


、、、、、、、、、、、、、、、、、、、、、、、、、、、、

3.系统变量和会话变量

系统变量:系统内部定义的变量,系统变量针对所有用户(MySQL客户端)有效。

查看系统所有变量:show variables [like ‘pattern’];

会话变量:会话变量也称之为用户变量,会话变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

4.判断、循环和函数

基本语法

If在Mysql中有两种基本用法

1、 用在select查询当中,当做一种条件来进行判断

基本语法:if(条件,为真结果,为假结果)


2、 用在复杂的语句块中(函数/存储过程/触发器)

基本语法

If  条件表达式  then

满足条件要执行的语句;

End  if;

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

复合语法

复合语法:代码的判断存在两面性,两面都有对应的代码执行。

基本语法:

If  条件表达式  then

满足条件要执行的语句;

Else

不满足条件要执行的语句;

//如果还有其他分支(细分),可以在里面再使用if

If 条件表达式 then

//满足要执行的语句

End if;

End  if;


、、、、、、、、、、、、、、、、、、、、、、、、、、

While循环

基本语法

循环体都是需要在大型代码块中使用

基本语法

While 条件 do

要循环执行的代码;

End while;

结构标识符

结构标识符:为某些特定的结构进行命名,然后为的是在某些地方使用名字

基本语法

标识名字:While 条件 do

循环体

End while [标识名字];

标识符的存在主要是为了循环体中使用循环控制。在mysql中没有continue和break,有自己的关键字替代:

Iterate:迭代,就是以下的代码不执行,重新开始循环(continue)

Leave:离开,整个循环终止(break)

标识名字:While 条件 do

If 条件判断 then

循环控制;

Iterate/leave 标识名字;

End if;

循环体

End while [标识名字];


函数

在mysql中,函数分为两类:系统函数(内置函数)和自定义函数

不管是内置函数还是用户自定义函数,都是使用select 函数名(参数列表);


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

2、完成一个迷你超市系统

1、用户表(用户名,密码)  用户名唯一

2、商品表(商品名,单价,数量,进货日期)商品名唯一

3、注册功能

1、用户名非空验证

2、用户名唯一验证

3、密码非空验证

4、密码长度必须在6-10之间

5、密码加密后存入数据库

4、登陆功能

5、登陆成功后,提示用户选择功能并实现

1、查询所有商品

2、根据商品名模糊查询

3、根据价格区间查询

4、修改商品

5、删除商品

6、退出


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

import hashlib

import pymysql

from datetime import datetime

def insert_u():

    """新增学生信息"""

    # 输入数据

    while True:

        name = input('姓名:')

        ret = judge_name(name)

        if ret == 1:

            print('用户名不能为空,请重新输入。')

        elif ret == 2:

            print('用户名已存在,请重新输入。')

        else:

            break

    while True:

        pwd = input('密码:')

        ret = judge_pwd(pwd)

        if ret == 1:

            print('密码不能为空,请重新输入。')

        elif ret == 0:

            if len(pwd)<6 or len(pwd)>10:

                print('密码长度必须在6到10位之间')

            else:

                break

    # 1、获取数据库连接对象

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'insert into s_user(name,pwd) values(%s,%s)'

    params = [name, encryption(pwd)]

    # 4、执行sql语句

    my_cursor.execute(sql, params)

    # 5、提交

    my_conn.commit()

    # 6、关闭

    my_cursor.close()

    my_conn.close()

    print('OK')

def insert_c():

    name = input('请输入商品名')

    price = input('请输入商品价格')

    number = input('请输入商品数量')

    stock_date = input('请输入商品进货日期')

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'insert into merc(name,price,number,stock_date) values(%s,%s,%s,%s)'

    params = [name,price,number,stock_date]

    # 4、执行sql语句

    my_cursor.execute(sql, params)

    # 5、提交

    my_conn.commit()

    # 6、关闭

    my_cursor.close()

    my_conn.close()

    print('OK')

def judge_name(name):

    """

    判断用户名

    1、非空

    2、唯一

    如果空      返回1

    如果重复    返回2

    如果合法    返回0

    """

    # 判断是否为空

    if name.strip() == '':

        return 1

    # 1、获取数据库连接对象

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'select count(*) from s_user where name = %s'

    params = [name]

    # 4、执行sql语句

    my_cursor.execute(sql, params)

    # 5、获取查询结果

    row = my_cursor.fetchone()

    print(row[0])

    # 6、关闭

    my_cursor.close()

    my_conn.close()

    # 7、判断

    if row[0] == 0:

        return 0

    else:

        return 2

def judge_pwd(pwd):

    """

    判断密码

    1、非空

    如果空      返回1

    如果合法    返回0

    """

    # 判断是否为空

    if pwd.strip() == '':

        return 1

    else:

        return 0

def encryption(pwd):

    my_md5 = hashlib.md5()

    my_md5.update(pwd.encode('utf-8'))

    ret = my_md5.hexdigest()

    return ret

def login():

    name = input('请输入用户名')

    pwd = input('请输入密码')

            # 1、获取数据库连接对象

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'select count(*) from s_user where name = %s and pwd = %s'

    params = [name,encryption(pwd)]

    # 4、执行sql语句

    my_cursor.execute(sql, params)

    # 5、获取查询结果

    row = my_cursor.fetchone()

    print(row)

    if row[0]==0:

        print('失败')

    else:

        print('成功')

def select_u():

    """查询所有学生信息"""

    # 1、获取数据库连接对象

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'select * from s_user'

    # 4、执行sql语句

    my_cursor.execute(sql)

    # 5、获取查询结果

    rows = my_cursor.fetchall()

    for sid, name, pwd in rows:

        print(name, pwd)

    # 6、关闭

    my_cursor.close()

    my_conn.close()

def select_c():

    """查询所有学生信息"""

    # 1、获取数据库连接对象

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'select * from merc'

    # 4、执行sql语句

    my_cursor.execute(sql)

    # 5、获取查询结果

    rows = my_cursor.fetchall()

    for sid, name, price ,number,stock_date in rows:

        print(name, price ,number,stock_date)

    # 6、关闭

    my_cursor.close()

    my_conn.close()

def dim(di):

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'select * from merc where name like %s'

    parsm = [di]

    # 4、执行sql语句

    my_cursor.execute(sql,parsm)

    # 5、获取查询结果

    rows = my_cursor.fetchall()

    for sid, name, price, number, stock_date in rows:

        print(name, price, number, stock_date)

    # 6、关闭

    my_cursor.close()

    my_conn.close()

def section(se,sec):

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'select * from merc where price BETWEEN %s and %s'

    parsm = [se,sec]

    # 4、执行sql语句

    my_cursor.execute(sql, parsm)

    # 5、获取查询结果

    rows = my_cursor.fetchall()

    for sid, name, price, number, stock_date in rows:

        print(name, price, number, stock_date)

    # 6、关闭

    my_cursor.close()

    my_conn.close()

def update(up,num):

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    print(up, num)

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'update merc set %s where id = %s'

    parsm = [up,num]

    # 4、执行sql语句

    my_cursor.execute(sql,parsm)

    # 5、获取查询结果

    rows = my_cursor.fetchall()

    for sid, name, price, number, stock_date in rows:

        print(name, price, number, stock_date)

    # 6、关闭

    my_conn.commit()

    my_cursor.close()

    my_conn.close()

def delete_c(dele):

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'delete from merc  where id = %s'

    print(dele)

    parsm = [dele]

    # 4、执行sql语句

    my_cursor.execute(sql,parsm)

    # 5、获取查询结果

    rows = my_cursor.fetchall()

    for sid, name, price, number, stock_date in rows:

        print(name, price, number, stock_date)

    # 6、关闭

    my_conn.commit()

    my_cursor.close()

    my_conn.close()

def delete_u(dele):

    my_conn = pymysql.connect(host='192.168.0.138',

                              user='root', password='root',

                              database='mydb', port=3306,

                              charset='utf8')

    # 2、获取执行sql的对象

    my_cursor = my_conn.cursor()

    # 3、准备sql语句和参数

    sql = 'delete from s_user  where id = %s'

    print(dele)

    parsm = [dele]

    # 4、执行sql语句

    my_cursor.execute(sql,parsm)

    # 5、获取查询结果

    rows = my_cursor.fetchall()

    for sid, name, price, number, stock_date in rows:

        print(name, price, number, stock_date)

    # 6、关闭

    my_conn.commit()

    my_cursor.close()

    my_conn.close()

if __name__ == '__main__':

    while True:

        choice = input('请选择数字\t\t\t\t1:新增\t2、查询所有\t3、模糊查询\t4、价格区间查询\t5、修改商品\t6、登录\t7、删除\t8、退出')

        if choice == '1':

            add = input('请输入要添加的:1添加用户名,2添加商品')

            if add == '1':

                insert_u()

            elif add == '2':

                insert_c()

        elif choice == '2':

            cho = input('请输入你要查询的:1查询用户,2查询商品')

            if cho =='1':

                select_u()

            elif cho=='2':

                select_c()

        elif choice == '3':

            dim('%花%')

        elif choice == '4':

            section(1,100)

        elif choice == '5':

            update('price="17"',5)

        elif choice =='6':

            login()

        elif choice =='7':

            dee = input("请输入你要删除的:1代表用户,2代表商品")

            if dee == '1':

                delete_u(1)

            elif dee == '2':

                delete_c(1)

        elif choice =='8':

            break

        else:

            continue

你可能感兴趣的:(2019-03-14)