python与mysql的交互(一)

python与mysql的交互(一)

    • 在mac上装mysql
    • python操作mysql的步骤
    • 解析
    • sql注入
      • 什么是sql注入?
      • 怎么防止?

在mac上装mysql

  • 下载mysql for mac: https://dev.mysql.com/downloads/mysql/
  • 解压dmg文件,点击pkg文件进行安装
  • Continue -> Continue, Agree -> Install -> 输入管理员密码 ->设置root用户密码
  • 进入系统偏好设置, 找到mysql, 启动服务,设置为开机自启
  • 将mysql的命令添加到系统中
    • 进入/usr/local/mysql/bin,查看此目录下是否有mysql
    • 执行vim ~/.bash_profile
    • 在该文件中添加mysql/bin的目录:PATH=$PATH:/usr/local/mysql/bin
      添加完成后,按esc,然后输入:x保存退出。
  • 返回命令行输入source ~/.bash_profile
  • 改密码:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');
  • 登录:mysql -uroot -p 回车,输入密码,也可以直接输入密码,不过密码就是可见的
  • 关于mysql的内容,后续补

python操作mysql的步骤

import pymysql # 如果是python3,没有就pip3 install pymysql
import MySQLdb # 如果是python2,就装MySQLdb
  • 'localhost’相当于本地的‘127.0.0.1’
  • 创建connection链接
    conn = pymysql.connect(host='localhost',port=xxxx, user='root',password='xxxx', database='xxxxxx', charset='utf8')
  • 获取游标对象 cursor
    cs1=conn.cursor()
  • 用它执行sql语句

    • cs1.execute("select * from goods;")
      如果成功会返回生效的行数
    • 查到的数据取出来
      cs1.fetchone() 一次取一个取出来的是元组,可以用一个变量接收,然后用角标取出每一个元素
      cs1.fetchall() 全取出来
      cs1.fetchmany(x) 你输入几就取出几组,不写取一个
  • 记得关闭游标对象,断开连接
    cs1.close()
    conn.close()

解析

  • 上叙的conn负责链接(connect)、提交(commit)、回滚(rollback)、断开链接(close)
  • 游标cs1
    • execute负责执行sql语句,包括增删改查,会返回生效的行数
    • fetchone/fetchmany/fetchall负责取出匹配到的元素,取出来的是元组
    • fetchone可以放到content_line里面,然后遍历content_line就可以打印出来了

sql注入

什么是sql注入?

  • 让用户查商品,你的表达式是:
    • select * from goods where name = '%s'
  • 用户的输入是:
    • 'or 1=1 or '1
  • 拼成的表达式是:
    • select * from goods where name = ''or 1=1 or '1'
  • 结果是:
    把goods里面的所有内容都选出来了!

怎么防止?

  • 用python自带的execute在一定程度上能够防止sql语句参数化
    • # 构造参数列表
      params = [find_name]
      # 如果有多个参数,只需要里面有多个%s来匹配即可
      count = cs1.execute(select * from goods where name ='%s', params)  ```
      

你可能感兴趣的:(Python,python)