• 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)
    
    
  • 相关阅读:
    UVA 11149.Power of Matrix-矩阵快速幂倍增
    51nod 1137.矩阵乘法-矩阵乘法
    HDU 4920.Matrix multiplication-矩阵乘法
    HDU 6237.A Simple Stone Game-欧拉函数找素因子 (2017中国大学生程序设计竞赛-哈尔滨站-重现赛)
    HDU 6235.Permutation (2017中国大学生程序设计竞赛-哈尔滨站-重现赛)
    POJ 2226.Muddy Fields-二分图最大匹配(最小点覆盖)
    POJ 3041.Asteroids-Hungary(匈牙利算法)
    HDU 2063.过山车-Hungary(匈牙利算法)
    Codeforces 832 B. Petya and Exam-字符串匹配
    HDU 6038.Function-数学+思维 (2017 Multi-University Training Contest
  • 原文地址:https://www.cnblogs.com/notfind/p/11413198.html
Copyright © 2020-2023  润新知