美文网首页
MySQL(四)

MySQL(四)

作者: w_wm_m | 来源:发表于2018-10-27 14:47 被阅读0次

    与Python交互

    使用pymysql来代替MySQLdb模块,它们用法非常相似。

    Connection对象

    • 用于创建数据库的连接
    • 创建对象调用connect()方法
    connection = pymysql.connect(
            host = 'localhost',
            user = 'root',
            password = 'password',
            database = 'learn',
            port = 3306,
            charset='utf8'
        )
    # connection = pymysql.connect(参数)
    
    pymysql.png
    connection对象的方法:
    • close():关闭连接
    • commit():事务,提交生效
    • rollback():事务,放弃之前的操作
    • cursor():返回cursor对象,用于执行sql语句并获得结果

    Cursor()对象

    • 执行sql语句
    • 创建对象:调用Connection对象的cursor()方法
    cursor = connection.cursor()
    

    cursor对象的方法:

    • close():关闭
    • execute(sql):执行sql语句,返回受影响的行数
    • fetchone():执行查询语句时,获取查询结果集的第一行数据,并以元组的形式返回
    • fetchall():执行查询语句时,获取数据结果集的所有行,将每行构成一个元组,在将这些元组放入一个元组里返回
    • next():执行查询语句时,获取当前行的下一行
    • scroll(value[,mode]):将行指针移动到某个位置
            * mode:表示移动方式
            * mode的默认值为relative,表示基于当前行移动到value,value为正则向下移动,value为负则向上移动
            * mode的值为absolute,表示基于第一条数据的位置,第一条数据的位置为0

    cursor对象的属性:

    • rowcount:只读属性,表示最近一次execute()执行后受影响的行数
    • connection:获得当前连接对象

    需要注意的是,pymysql默认开启事务,所以执行DML操作时需要commit或rollback

    总结:
          连接数据库(创建Connection对象)→创建游标(创建cursor对象)→执行SQL(使用cursor)→fetch获得数据,进行业务处理(使用cursor)→关闭游标→commit(使用connection)→关闭数据库连接

    import pymysql
    
    try:
        connection = pymysql.connect(
            host = 'localhost',
            user = 'root',
            password = 'password',
            database = 'learn',
            port = 3306,
            charset='utf8'
        )
    
        cursor = connection.cursor()
    
        sql = 'insert into students(name) value("jtt")'
    
        cursor.execute(sql)
    
        connection.commit()
    
        cursor.close()
    
        connection.close()
    
    except Exception as e:
        print(e)
    

    参数化

         一种解决sql注入的方式。
         SQL注入:针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

    sql注入.png
         通过分析可以知道用户如果输入了一些意外的字符,那么会导致不安全的问题出现,如图所示,通过拼凑sql语句用户可以获得所有信息。所以不得不在后台处理数据时,考虑到这些问题。为此引进了参数化。
    import pymysql
    
    name = input("name:")
    
    params = [name]
    
    try:
        connection = pymysql.connect(
            host = 'localhost',
            user = 'root',
            password = '199711',
            database = 'learn',
            port = 3306,
            charset='utf8'
        )
    
        cursor = connection.cursor()
    
        sql = "select * from students where name=%s"
    
        cursor.execute(sql,params)
    
        result = cursor.fetchall()
    
        cursor.close()
    
        connection.close()
    
        print(result)
    
    except Exception as e:
        print(e)
    

         需要注意的是,%s是一个占位符需要和格式化输出区别,无论是什么数据类型都要使用%s占位,params是一个列表,存放变量。

    相关文章

      网友评论

          本文标题:MySQL(四)

          本文链接:https://www.haomeiwen.com/subject/gfhdtqtx.html