python与mysql的交互(一)

在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)  ```
      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值