数据库编程(python+mysql)

流程:

  • 使用pymysql模块
  • 建立连接:

    con = connect(host='localhost',port=3306,user='dbuser1',password='',database='dbname',charset='utf8')

  • 获取游标:

    cur = con.cursor()

  • 执行sql:

    cur.execute('要执行的sql语句') #会返回一个受影响行数的数字

  • 如果是select语句,可用cur.fetchone(),cur.fetchmany(2),cur.fetchall()获取查询的数据,返回值是元组类型。这里要注意的是在一次查询中前面的取过了就不会再取,因为游标是移动的
  • 数据有变化时提交:

    con.commit()

  • 撤销,回滚:

    con.rollback()

  • 关闭游标:

    cur.close()

  • 关闭连接:

    con.close()

    sql注入

  • 如在需要用户输入作为参数传递给sql语句时,用户有可能输入or连接符,此时拿到输入数据传递给sql语句时就会产生sql注入的问题,如下:

    find_id = input('请输入要查询的id')
    sql = 'select * from t_table1 where id = %s;' %find_id
    cur.execute(sql)

  • 此时如果用户输入1 or 2,sql会拼接为:select * from t_table1 where id = 1 or 2;这条语句会查询出所有的数据
  • 解决办法为给execute传入另外一个参数,该参数是元组形式,传入的值为需要传递的输入值

    sql = 'select * from t_table1 where id = %s;' #不再在这里格式化字符串
    cur.execute(sql,(find_id,))

转载于:https://www.cnblogs.com/being-a-tester/p/10320184.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值