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

    老师的博客地址:http://www.cnblogs.com/wupeiqi/articles/5713330.html

    通过pymysql 模块可以通过朋友去操作mysql 数据库,首先的在pip上配置好pymysql模块。然后进行如下操作,简单的模拟用数据库去登录的操作。

    模拟登陆

    mport pymysql
    use=input('user:')
    psw=input('password:')
    #建立连接 host地址 database是具体的数据库
    conn=pymysql.connect(host='localhost',user='root',password='',database='review60')
    # 进入数据后建立光标
    cursor=conn.cursor()
    #info是指数据库的某个表 注意如果mysql是字符串的数据类型,一定要记得加上啊'',否则就会报错
    sql="select * from info where user=%s and password=%s"  %(use,psw,)
    #光标执行sql里面的代码cursor.execute(sql)#这个其实是有返回值的,表示影响了及行,一般是删改查的时候会有用。#得到执行代码说返回的信息
    result=cursor.fetchone()
    #两个关闭,关闭数据库
    cursor.close()
    conn.close()
    print(result)
    if result:
        print('登陆成功')
    else:
        print('登录失败')

     上面的操作有一定的风险,请看下面。

    当你的用户输入:sdf' or 1=1 -- 或者 :正确的用户名' --  时肯定登录成功,
    因为sql 就变成了select * from info where user='%s' and password='%s'
    mysql的注释是 -- 所以就能够绕开后面的直接拿到信息
    sql="select * from info where user=%s and password=%s"
    cursor.execute(sql,use,psw)# cursor.execute(sql,[use,psw)])
                                cursor.execute(sql,[use,psw])
    sql="select * from info where user=%(u)s and password=%(p)s"  #%(use,psw,)
    cursor.execute(sql,{'u':use,'p':psw})
    输入多个时的写法
    sql="select * from info where user=%s and password=%s"
    cursor.execute(sql,[(1,2),(3,4)])#其他类似的操作也可

     关于数据库的commit和注册用户

    import pymysql
    print('注册用户')
    use=input('user:')
    psw=input('password:')
    conn=pymysql.connect(host='localhost',user='root',password='',database='review60')
    cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#获取的是一个字典的形式
    sql="insert into info(user,password) values (%s,%s)"#此时就不需要加上''了
    a=cursor.execute(sql,[use,psw])
    print('数据影响的行数:',a)#数据影响的行数
    print('自增的id:',cursor.lastrowid)#获取新的自增的id
    conn.commit()#一定要提交,不然写入的数据会没有效果,就是写入失败
    cursor.close()
    conn.close()
    print('注册成功')

     对于commit时,可以在处理完完个数据时,在commit这样的效率便会高上许多。

    关于fetch与查询

    import pymysql
    print('查询数据库')
    conn=pymysql.connect(host='localhost',user='root',password='',database='review60')
    cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#得到信息是以字典的形式
    sql='select * from info'
    cursor.execute(sql)
    a=cursor.fetchone()
    print('前一条数据:',a)
    #将光标往上移动一个
    cursor.scroll(-1,mode='relative')
    b=cursor.fetchmany(2)#得到前两条数据
    
    print('前两条数据:',b)
    #将光标移动到最开始的位置
    cursor.scroll(0,mode='absolute')
    c=cursor.fetchall()
    print('全部数据:',c)
    cursor.close()
    conn.close()

     注意由于fetchall是抓取全部的数据,你不知道数据库的东西到底有多大,所以的配合limit来使用。

  • 相关阅读:
    linux LTIB学习笔记
    wince WaitForMultipleObjects需要注意的问题
    微信小程序在苹果上出现[request:fail 发生了 SSL 错误无法建立与该服务器的安全连接。]错误的解决方案
    Windows 2008之PKI实战4:吊销
    十个不找工作的理由
    [zt]我奋斗了18年不是为了和你一起喝咖啡
    [zt]Java/PHP/C 几种语言 RSA 的互操作
    全职共享和兼职的一些思考pkill
    定价策略(翻译稿)
    Windows 2008之PKI实战1:管理
  • 原文地址:https://www.cnblogs.com/accolade/p/10634641.html
Copyright © 2011-2022 走看看