• MySQL与Python交互


    01_python连接数据库

    import mysql.connector
    
    con = mysql.connector.connect(
        host="localhost",port="3306",
        user="root",password="wq123",
        database="demo"
    )
    cursor = con.cursor()
    sql = "SELECT empno,ename,hiredate FROM t_emp;"
    cursor.execute(sql)
    for one in cursor:
        print(one[0],one[1],one[2])
    con.close()

    02_mysql注入攻击

    import mysql.connector
    config = {
        "host":"localhost",
        "port":3306,
        "user":"root",
        "password":"wq123",
        "database":"vege"
    }
    con = mysql.connector.connect(**config)
    
    username = "1 OR 1=1"
    password = "1 OR 1=1"
    sql = "SELECT COUNT(*) FROM t_user WHERE username = %s "
          "AND AES_DECRYPT(UNHEX(password),'HelloWorld')=%s" %(username,password);
    
    cursor = con.cursor()
    cursor.execute(sql)
    print(cursor.fetchone()[0])
    con.close

    03_预防注入攻击

    import mysql.connector
    config = {
        "host":"localhost",
        "port":3306,
        "user":"root",
        "password":"wq123",
        "database":"vege"
    }
    con = mysql.connector.connect(**config)
    
    username = "1 OR 1=1"
    password = "1 OR 1=1"
    sql = "SELECT COUNT(*) FROM t_user WHERE username = %s "
          "AND AES_DECRYPT(UNHEX(password),'HelloWorld')=%s";
    
    cursor = con.cursor()
    cursor.execute(sql,(username,password))
    print(cursor.fetchone()[0])
    con.close

    04_事务控制-异常处理

    import mysql.connector
    try:
        con = mysql.connector.connect(
            host="localhost",
            port=3306,
            user="root",
            password="wq123",
            database="demo"
        )
        con.start_transaction()
        cursor = con.cursor()
        sql = "INSERT INTO t_emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) 
               VALUES(%s,%s,%s,%s,%s,%s,%s,%s)"
        cursor.execute(sql,(9600,"赵娜","SALESMAN",None,"1985-12-01",2500,None,10))    
        con.commit()
    
    except Exception as e:
        if "con" in dir():
            con.rollback()
            print(e)
    finally:
        if "con" in dir():
            con.close()

    05_数据库连接池

    import mysql.connector.pooling
    
    config = {
        "host":"localhost",
        "port":3306,
        "user":"root",
        "password":"wq123",
        "database":"demo"
    }
    try:
        # 创建连接池
        pool = mysql.connector.pooling.MySQLConnectionPool(
            **config,
            pool_size=10
        )
        # 获取连接池
        con = pool.get_connection()
        con.start_transaction()
        cursor = con.cursor()
        sql = "UPDATE t_emp SET sal = sal + %s WHERE deptno=%s"
        cursor.execute(sql,(200,20))
        con.commit()
    except Exception as e:
        if "con" in dir():
            con.rollback()
        print(e)

    06_删除记录

    import mysql.connector.pooling
    config = {
        "host":"localhost",
        "port":3306,
        "user":"root",
        "password":"wq123",
        "database":"demo"
    }
    try:
        pool = mysql.connector.pooling.MySQLConnectionPool(
            **config,
            pool_size=10
        )
        con = pool.get_connection()
        # con.start_transaction()
        cursor = con.cursor()
        # sql = "DELETE e,d FROM t_emp e JOIN t_dept d "
        #       "ON e.deptno = d.deptno WHERE d.deptno=20"
        sql = "TRUNCATE TABLE t_emp" # 两种删除数据的方法,区别在于注释增减
        cursor.execute(sql)
        # con.commit()
    except Exception as e:
        # if "con" in dir():
        #     con.rollback()
        print(e)

    07_循环执行sql语句

    import mysql.connector.pooling
    
    config = {
        "host":"localhost",
        "port":3306,
        "user":"root",
        "password":"wq123",
        "database":"demo"
    }
    try:
        pool = mysql.connector.pooling.MySQLConnectionPool(
            **config,
            pool_size=10
        )
        con = pool.get_connection()
        con.start_transaction()
        cursor = con.cursor()
        sql = "INSERT INTO t_dept(deptno,dname,loc) VALUES(%s,%s,%s)"
        data = [
            [100,"A","北京"],[101,"B","上海"],
        ]
        cursor.executemany(sql,data)
        con.commit()
    except Exception as e:
        if "con" in dir():
            con.rollback()
        print(e)

    08_mysql _connector综合使用

    """
    使用insert语句,把部门平均底薪超过公司平均底薪的部门里的员工
    信息导入到t_emp_new表里面,并且让这些员工隶属于sales部门
    """
    
    import mysql.connector.pooling
    
    config = {
        "host":"localhost",
        "port":3306,
        "user":"root",
        "password":"wq123",
        "database":"demo"
    }
    try:
        pool = mysql.connector.pooling.MySQLConnectionPool(
            **config,
            pool_size=10
        )
        con = pool.get_connection()
        con.start_transaction()
        cursor = con.cursor()
        # 删除测试数据表
        sql = "DROP TABLE t_emp_new"
        cursor.execute(sql)
        # 创建新的数据表
        sql = "CREATE TABLE t_emp_new LIKE t_emp"
        cursor.execute(sql)
        # 找出整个部门的平均薪资,并将数据保存在变量avg中
        sql = "SELECT AVG(sal) AS avg FROM t_emp"
        cursor.execute(sql)
        temp = cursor.fetchone()
        avg = temp[0] # 公司平均底薪
        # 按部门分组,找出薪资大于公司平均薪资的部门
        sql = "SELECT deptno FROM t_emp GROUP BY deptno HAVING AVG(sal) >= %s"
        cursor.execute(sql,[avg])
        temp = cursor.fetchall()
        sql = "INSERT INTO t_emp_new SELECT * FROM t_emp WHERE deptno IN ("
    
        for index in range(len(temp)):
            one = temp[index][0]
            if index < len(temp) - 1:
                sql += str(one) + ","
            else:
                sql += str(one)
    
        sql += ")"
        cursor.execute(sql)
        sql = "DELETE FROM t_emp WHERE deptno IN ("
    
        for index in range(len(temp)):
            one = temp[index][0]
            if index < len(temp) - 1:
                sql += str(one) + ","
            else:
                sql += str(one)
    
        sql += ")"
        cursor.execute(sql)
    
        sql = "SELECT deptno FROM t_dept WHERE dname = %s"
        cursor.execute(sql,["SALES"])
        deptno = cursor.fetchone()[0]
    
        sql = "UPDATE t_emp_new SET deptno = %s"
        cursor.execute(sql,[deptno])
    
        con.commit()
    except Exception as e:
        if "con" in dir():
            con.rollback()
        print(e)

    09_mysql_connector综合使用2

    """
    编写一个insert语句,向部门表插入两条记录,
    每条记录都在部门原有最大主键值的基础上+10
    """
    import mysql.connector.pooling
    config = {
        "host":"localhost",
        "port":3306,
        "user":"root",
        "password":"wq123",
        "database":"demo"
    }
    try:
        pool = mysql.connector.pooling.MySQLConnectionPool(
            **config,
            pool_size=10  
        )
        con = pool.get_connection()
        con.start_transaction()
        sql = "INSERT INTO t_dept "
              "(SELECT MAX(deptno)+10,%s,%s FROM t_dept UNION 
                SELECT MAX(deptno)+20,%s,%s FROM t_dept)"
        cursor = con.cursor()
        cursor.execute(sql,("A部门","北京","B部门","上海"))
        con.commit()
    except Exception as e:
        if "con" in dir():
            con.rollback()
        print(e)
  • 相关阅读:
    夯实JavaScript基础之prototype, __proto__, instanceof
    入住博客园
    基础知识盲点——2
    Vuecli开发笔记三引入外部插件
    转让阿里云服务器(CPU2G+内存2G+带宽5M+硬盘150G)
    ubuntu 1
    ftp命令
    mysql数据库备份及恢复命令mysqldump,source的用法
    wordpress option的操作
    wordpress作者角色添加不了视频代码
  • 原文地址:https://www.cnblogs.com/waterr/p/13959156.html
Copyright © 2020-2023  润新知