zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    简述SharePoint designer 工作流实现用户撤回申请得解决方案,how to revoke/recall application in SharePoint designer workflow
    怎么给SharePoint得视图设置多个过滤条件? How to set multiple complex filter conditions to the SharePoint list view ?
    SharePoint designer workflow给一个hyperlink类型得field赋值, How to set value to a hyperlink field by designer workflow
    [SharePoint]解决用户权限被无缘无故自动删除的问题
    [SharePoint Online]SharePoint Designer无法打开世纪互联版sp online站点得解决方法,报错信息:请安装更新后再重新打开
    [Javascript]利用当前时间生成yyyymmddhhmmss这样的字符串
    SharePoint项目实践中如何实现非打破继承看上去很美的权限控制
    SharePoint如何将使列表不被爬网爬到。
    [SharePoint]javascript client object model 获取lookup 类型的field的值,包括user类型(单人或者多人)的值。how to get the multiple user type/lookup type field value by Javascript client object model
    SharePoint 自定义的列表页面中添加javascript的一个 For循环语句后,该页面就打不开了。
  • 原文地址:https://www.cnblogs.com/waterr/p/13959156.html
Copyright © 2011-2022 走看看