zoukankan      html  css  js  c++  java
  • pymysql模块的使用

    一、连接MySQL服务器

    import pymysql
    
    # 连接数据库,调用Connect函数(Connect函数会返回Connection的一个对象)
    conn = pymysql.Connect(host='localhost',  		#主机ip
                                 port=3306,         #端口
                                 user='user',	    #用户名
                                 password='passwd', #密码
                                 database='db',		#数据库名称
                                 charset='utf8',	#字符集
                                )
    
    
    

    二、对数据库进行操作(增删改查)

    mysql> select * from userinfo;
    +----+-------+------+
    | id | name  | pwd  |
    +----+-------+------+
    |  1 | sssss | 123  |
    |  2 | abc   | 233  |
    +----+-------+------+
    
    1.查询(模拟用户登录)
    username = input('请输入用户名:')
    pwd = input('请输入密码:')
    #书写要执行的SQL语句(字符串形式,注意单双引号的使用)
    sql = 'select * from userinfo where name="%s" and pwd="%s"'%(username,pwd)
    cur = conn.cursor()    	#调用cursor方法,该方法会返回一个Cursor对象
    cur.execute(sql) #调用execute方法执行sql语句 (如果执行成功,这里会返回查询结果数)
    cur.close()      #关闭
    conn.close()
    
    #上述的sql语句存在“漏洞”,如果username输入: xx" or 1=1 -- xxx,这样的骚操作,就可以使用错误的username 并跳过密码,因为相当于执行了select * from userinfo where name=" xx" or 1=1 -- xxx" and pwd="这里随意"这样的语句,1=1是始终成立的,而1=1之后被注释掉了。
    
    username = input('请输入用户名:')
    pwd = input('请输入密码:')
    sql = 'select * from userinfo where name=%(name)s and pwd=%(pwd)s'
    cur.execute(sql,{'name':username,'pwd':pwd}) #防注释处理
    cur.close()     
    conn.close()
    
    
    2.增删改
    mysql> select * from userinfo;
    +----+--------+------+
    | id | name   | pwd  |
    +----+--------+------+
    |  1 | Sroxi  | 123  |
    |  2 | abc    | 233  |
    |  3 | QaQ    | 306  |
    |  4 | Violet | 520  |
    +----+--------+------+
    
    #增
    cur = conn.cursor()
    sql = 'insert into userinfo(username,pwd) valuses(%s,%s)'
    cur.execute(sql,(username,pwd))
    #cur.executemany(sql,[(username1,pwd1),(username2,pwd2)]) #一次插入多条数据
    #改
    sql = 'update userinfo set name = %s where id = 1'
    cur.execute(sql,username)
    #删 
    sql = 'delete from userinfo where id = 2'
    cursor.execute(sql)
    
    
    
    conn.commit() #执行增删改等操作后一定要commit,否则操作无效
    cursor.close()
    conn.close()
    
    
    3.查:fetchone()、fetchmany()、fetchall()和scroll()

    在使用这三个方法之前必须先使用execute(),否则 raise err.ProgrammingError("execute() first"),并且执型的是select语句,它们只能从select 查询得到的临时表中查找。

    1. ​ fetchone()查询一条记录,并将游标移动到下一行
    2. ​ fetchall()查询所有数据
    3. ​ fetchmany(N)查询N条数据
    4. ​ scroll(value,mode) 移动游标,负值mode ;可以是'relative'或‘absolute’
    3.1fetchone()和fetchall()
    #默认情况下,我们获取到的返回值是元组,只能看到每行的数据,却不知道每一列代表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典:
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = 'select * from userinfo '
    cur.execute(sql)
    row = cur.fetchone() 
    print(row)
    row1 = cur.fetchone()
    print(row1)
    row2 = cur.fetchall()
    print(row2)
    
    打印结果:
    {'id': 1, 'name': 'Sroxi', 'pwd': '123'}
    {'id': 2, 'name': 'abc', 'pwd': '233'}
    [{'id': 3, 'name': 'QaQ', 'pwd': '306'}, {'id': 4, 'name': 'Violet', 'pwd': '520'}]
    
    
    3.2fetchmany()和scroll()
    cur.scroll(-2,'relative')  #负值向上移动,'relative'表示当前位置,absolute()表示起始位置
    row3 = cur.fetchmany(2) #读取两条记录
    print(row3)
    
    
  • 相关阅读:
    215. Kth Largest Element in an Array(partition逆序排序,index+1 == k)
    220. Contains Duplicate III(核心:set数组有序/桶排序)
    leetcode 772 基本计算器III(包含+-*/ 以及括号) 核心在于递归
    MTK8312 android 4.4 显示虚拟按键区源码修改
    高通android9.0 camera API1底层调用为HAL3而非HAL1
    使用yanzhenjie的Zbar Github项目时4.2版本上找不到so库的问题
    android studio CMake NDK:配置笔记
    android设置系统默认开机时间
    android开发里跳过的坑——GridView使用Glide加载图片不显示
    android系统编译打开系统蓝牙
  • 原文地址:https://www.cnblogs.com/notfind/p/11413198.html
Copyright © 2011-2022 走看看