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

    pymysql模块

    语法

     1import pymysql
    2#链接
    3conn=pymysql.connect(host='localhost',user='root',password='123',database='egon',charset='utf8')
    4#游标
    5cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
    6#cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#以字典的显示
    7# cursor.scroll(3,mode='absolute') # 相对绝对位置移动
    8# cursor.scroll(3,mode='relative') # 相对当前位置移动
    9---------------------------------------
    10#执行sql语句
    11sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引号
    12print(sql)
    13res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
    14print(res)
    15cursor.close()
    16conn.close()
    17if res:
    18 print('登录成功')
    19else:
    20 print('登录失败')

    execute()之sql注入

    注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符
    根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'

    1最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name='egon';则--之后的条件被注释掉了
    2#1、sql注入之:用户存在,绕过密码
    3egon' -- 任意字符
    4#2、sql注入之:用户不存在,绕过用户与密码
    5xxx'
    or 1=1 -- 任意字符


    # 在服务端防止sql注入问题:不要自己拼接字符串,让pymysql模块去拼接

    1# 原来是我们对sql进行字符串拼接
    2# sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
    3# print(sql)
    4# res=cursor.execute(sql)
    5#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
    6sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
    7res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

    增、删、改:conn.commit()

     1import pymysql
    2#链接
    3conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
    4#游标
    5cursor=conn.cursor()
    6#执行sql语句
    7#part1
    8# sql='insert into userinfo(name,password) values("root","123456");'
    9# res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数
    10# print(res)
    11#part2
    12# sql='insert into userinfo(name,password) values(%s,%s);'
    13# res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数
    14# print(res)
    15#part3
    16sql='insert into userinfo(name,password) values(%s,%s);'
    17res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #执行sql语句,返回sql影响成功的行数
    18print(res)
    19conn.commit() #提交后才发现表中插入记录成功
    20cursor.close()
    21conn.close()

    查:fetchone,fetchmany,fetchall

     1import pymysql
    2#链接
    3conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
    4#游标
    5cursor=conn.cursor()
    6#执行sql语句
    7sql='select * from userinfo;'
    8rows=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询
    9# cursor.scroll(3,mode='absolute') # 相对绝对位置移动
    10# cursor.scroll(3,mode='relative') # 相对当前位置移动
    11res1=cursor.fetchone()
    12res2=cursor.fetchone()
    13res3=cursor.fetchone()
    14res4=cursor.fetchmany(2)
    15res5=cursor.fetchall()
    16print(res1)
    17print(res2)
    18print(res3)
    19print(res4)
    20print(res5)
    21print('%s rows in set (0.00 sec)' %rows)
    22conn.commit() #提交后才发现表中插入记录成功
    23cursor.close()
    24conn.close()
    25'''
    26(1, '
    root', '123456')
    27(2, '
    root', '123456')
    28(3, '
    root', '123456')
    29((4, '
    root', '123456'), (5, 'root', '123456'))
    30((6, '
    root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))
    31rows in set (0.00 sec)
    32

  • 相关阅读:
    NX 调试批处理文件
    NXOpen 更改UI对话框宽度
    NXOpen 遍历体 移动图层
    NXOpen 设置工作图层 一键开关图层
    NXOpen Block UI弹出另一个对话框实例
    NXOpen 座标UI获取 (原点 矩阵变换)
    [StackExchange]Redis 的几种类型的操作(string,hash,lists,set,sorted set)
    IIS 并发连接 设置与测试
    [StackExchage]Redis 的连接与操作(跨机器)
    Redis 事务
  • 原文地址:https://www.cnblogs.com/guodengjian/p/9025169.html
Copyright © 2011-2022 走看看