zoukankan      html  css  js  c++  java
  • MySQL与Python交互

    拆表

    将分组结果插入另一张表里

    insert into goods_cates (name) select cate_name from goods group by cate_name; # 注意,不用加values

    同步数据表,把一张表字段覆盖到另一张表上

    update goods as g inner join goods_cates as c on g.cate_name = c.name set g.cate_name = c.id;

    改字段的类型 change

    创建外键

    alter table goods add foreign Key (cate_id) references goods_cates(id);

    删掉外键

    alter table goods drop foreign Key 外键名; # 外键名可以通过语句"show create table good;"查询

    from pymysql import *
    
    def main():
        # 创建Connection连接
        connc = connect(host="localhost", port=3306, user="root", password="root", database="python02", charset="utf8")
        # 获得Cursor对象
        csl = connc.cursor() # csl相当于游标,查询结果保存在里面,每执行一次csl.fetchone()会自动指向下一行数据。csl.fetchmany(x),x接受参数;csl.fetchall()返回所有数据,格式为一个元组嵌套另一个元组;# 执行select语句,并返回受影响的行数:查询一条数据  count = csl.execute('SELECT id, name FROM students2 WHERE gender = 2') 
      # 打印受影响的行数
      
    print("查询到%d条数据" % count)

      for i in range(count):
        
    # 获取当前的结果
        result = csl.fetchone()
        
    # 打印查询的结果
        print(result)

      # 关闭Cursor对象
      csl.close()
      connc.close()

    if __name__ == "__main__": main()

     增删改这三个需要修改数据库的地方,在操作完,关闭连接之前,需要加上

    conn.commit()

    撤销刚才的操作,在commit()之前,运行

    conn.rollback()

    防止MySQL的注入

    注意:符号--会注释掉它之后的sql,正确的语法:--后至少有一个任意字符

    根本原理:就根据程序的字符串拼接name='%s',我们输入一个xxx' -- haha,用我们输入的xxx加'在程序中拼接成一个判断条件name='xxx' -- haha'

    最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name='egon';则--之后的条件被注释掉了
    
    #1、sql注入之:用户存在,绕过密码
    egon' -- 任意字符
    
    #2、sql注入之:用户不存在,绕过用户与密码
    xxx' or 1=1 -- 任意字符
    # 原来是我们对sql进行字符串拼接
    # sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
    # print(sql)
    # res=cursor.execute(sql)
    
    #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
    sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
    res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
  • 相关阅读:
    Solution: Win 10 和 Ubuntu 16.04 LTS双系统, Win 10 不能从grub启动
    在Ubuntu上如何往fcitx里添加输入法
    LaTeX 笔记---Q&A
    Hong Kong Regional Online Preliminary 2016 C. Classrooms
    Codeforces 711E ZS and The Birthday Paradox
    poj 2342 anniversary party
    poj 1088 滑雪
    poj 2479 maximum sum
    poj 2481 cows
    poj 2352 stars
  • 原文地址:https://www.cnblogs.com/linyuhong/p/9983049.html
Copyright © 2011-2022 走看看