zoukankan      html  css  js  c++  java
  • pymsql模块

    什么是pymysql模块

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

    使用pymysql模块

    下载第三方模块: pip3 install pymysql

    import pymysql  
    
    # 1.连接并打开Mysql数据库
    conn = pymysql.connect(
        host='127.0.0.1',  #主机地址,若是自己的主机也可以用'localhost'
        port=3306,  #端口
        user='root',  #用户
        password='123456',  #密码
        database='db4',  #数据库
        charset='utf8',  # 设置编码,此处不能写utf-8
        autocommit=True  # 自动提交
    )
    
    # 2.创建游标,获取游标对象 ----> 游标 可以用来提交sql命令
    #pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
    cursor_obj = conn.cursor(pymysql.cursors.DictCursor)
    
    # 3.通过execute()方法可以执行sql语句
    # 查数据
    cursor_obj.execute('select * from t1')
    
    # 查到数据后通过cursor_obj对象.fetchall() 获取所以查询到的结果
    one = cursor_obj.fetchone()  #获取结果的第一条数据  fetchone()
    print(one)
    
    for i in cursor_obj.fetchmany(3): #获取剩余结果的前n条数据  #fetchmany()
        print(i)
    
    all = cursor_obj.fetchall()   # 获取剩余结果的所有数据
    for j in all :
        print(j)
    
    #相对移动
    cursor_obj.scroll(2,
    'relative') #基于指针所在的位置向后偏移2个
    #绝对移动
    cursor_obj.scroll(2,
    'absolute') #基于起始位置向后偏移2个
    
    # 一、创建表
    #若表存在则删除
    cursor_obj.execute('drop table if exists user')
    
    #创建表
    sql = 'create table t1(id int,auto_increment,name varchar(20))'
    
    # 5.使用 execute() 方法执行创建数据库语句
    cursor_obj.execute(sql)
    
    
    
    # 二、SQL 插入语句
    try:
    	sql = 'insert into user(id, name) values(1, "baohan")'
    	#执行 sql 语句
    	cursor_obj.execute(sql)
    	#提交到数据库执行,不然无法保存新建或者修改的数据
    	cursor_obj.commit()
    except Exception as e:
    	print(e)
    	
    
    
    # 三、更新数据
    try:
        sql = 'update user set name="baohan_666" where id=1'
        cursor_obj.execute(sql)
    
    except:
       # 如果发生错误则回滚
    	conn.rollback()
    
    #对数据进行查找
    print(cursor_obj.execute('select * from user'))
    print(cursor_obj.fetchall())
    
    
    
    # 四、删除数据
    sql = 'delete from user'
    cursor_obj.execute(sql)
    
    # 提交,不然无法保存新建或者修改的数据
    conn.commit()
    # 关闭游标
    cursor_obj.close()
    # 关闭连接
    conn.close()
    
    

    SQL的注入问题

    sql注入问题:利用特殊符号和注释语法 巧妙地绕过真正的sql校验

    关键性的数据 不要自己手动去拼接 而是交由execute帮你去做拼接

    import pymysql
    
    conn = pymysql.connect(
        host = 'localhost',
        user = 'root',
        passwd = '123',
        charset = 'utf8',
        db = 'day36',
        autocommit = True
    )
    
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    #获取用户输入的用户名和密码 然后去数据库中校验
    username = input('username>>>:').strip()
    password = input('password>>>:').strip()
    
    # sql = "select * from user_info where name='%s' and password= '%s'"%(username,password)  #错误写法,会产生SQL注入问题
    sql = "select * from user_info where username=%s and password=%s"
    
    cursor.execute(sql,(username,password))
    res = cursor.fetchall()
    if res:
        print(res)
    else:
        print('用户名或密码错误')
    
    
     
  • 相关阅读:
    关于数组赋值时找不到数组名字的问题
    显示转换与隐式转换
    类型(值类型和引用类型)
    .net webconfig中配置httphanlder无法生效的问题
    微信小程序开发知识点总结
    Raphael.js API 之 Element.attr()
    Raphael.js API 之 Element.attr()
    Raphael.js API之 Animation.delay(),Animation.repeat(),Element.animateWith()
    Raphael.js API之 Animation.delay(),Animation.repeat(),Element.animateWith()
    Raphael.js API之 Paper.path(),Element.click()
  • 原文地址:https://www.cnblogs.com/wddxx/p/13744140.html
Copyright © 2011-2022 走看看