美文网首页
python学习笔记-数据库09_pyMySQL

python学习笔记-数据库09_pyMySQL

作者: MR_詹 | 来源:发表于2020-11-15 11:18 被阅读0次

Python 与 MySQL 数据通讯需要安装第三方包:pyMySQL,安装教程如下:

pip3 安装
sudo apt install python3-pip

pymysql安装
sudo pip3 install pymysql

安装命令:sudo pip3 install 第三方包名
卸载命令:sudo pip3 uninstall 第三方包名
查看第三方包信息: pip3 show 第三方包名
pip3 list: 查看使用pip命令安装的第三方包列表

如果实现将10000条数据插入到MySQL数据库?
如果使用之前学习的MySQL客户端来完成这个操作,那么这个工作量无疑是巨大的,可以通过使用程序代码的方式去连接MySQL数据库,然后对MySQL数据库进行增删改查的方式,实现10000条数据的插入,像这样使用代码的方式操作数据库就称为数据库编程

步骤如下:

1、导入pymysql包
import pymysql

2、创建连接对象
调用pymysql模块中的connect()函数来创建连接对象,代码如下
conn = connect(参数列表)

  • 参数host:连接mysql主机,如果本机是'localhost'
  • 参数port:连接mysql主机的端口号,默认是3306
  • 参数user : 连接的用户名
  • 参数password : 连接的密码
  • 参数database: 数据库的名称
  • 参数charset : 通信采用的编码方式,推荐使用utf8

连接对象操作说明:
关闭连接: conn.close()
提交数据: conn.commit()
撤销数据: conn.rollback()

3、获取游标对象
获取游标对象的目标是要执行sql语句完成对数据库的增、删、改、查操作。代码如下:
// 调用连接对象的cursor()方法获取游标对象
cur = conn.cursor()

游标操作说明:

  • 使用游标执行sql语句:execute(operation[parameters]) 执行sql语句,返回受影响的行数,主要用于执行insert、update、delete、select等语句
  • 获取查询结果集中的一条数据cur.fetchone()返回一个元组,如(1,'张三')
  • 获取查询结果中的所有数据cur.fetchall()返回一个元组,如((1,'张三'),(2,'李四'))
  • 关闭游标:cur.close() 表示和数据库操作完成

# 1.0 导入pymysql包
import pymysql

if __name__ == '__main__':
    # 2.0 创建连接对象
    conn = pymysql.connect(host='localhost',
                           port=3306,
                           user='root',
                           password='qianli01',
                           database='pyhon3',
                           charset='utf8')

    # 3.0 获取游标
    cursor = conn.cursor()

    # 4.0 执行sql语句
    # 准确sql语句
    sql = "select * from students;"
    cursor.execute(sql)
    # 获取查询结果
    # fetchone一次拿一个值,
    first = cursor.fetchone()
    print('第一个值')
    print(first)

    second = cursor.fetchone()
    print('第二个值')
    print(second)

    print('全部')
    all = cursor.fetchall()
    print(all)

    # 5.0 关闭游标
    cursor.close()

    # 6.0 关闭连接
    conn.close()
image.png

备注:获取查询结果fetchone()fetchall()方法都是将结果集中数据取出,每取一个,结果集的数据就少一个

防止SQL注入

SQL注入:用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生数据泄露的现象
如何防止SQL注入?
SQL语句参数化

  • SQL语言中的参数使用%s来占位,此处不是python中的字符串格式化操作
  • 将SQL语句中%s占位所需要的参数存在一个列表中,把参数列表传递给execute方法中第二个参数
// 被sql注入的语句,导致查询的结果是表的全部内容
sql ="select * from students where name = '%s'" % "黄蓉 'or 1 = 1 or '"
// 打印sql结果:select * from students where name = '黄蓉 'or 1 = 1 or ''

# 正确写法:
# 使用防止sql注入的sql语句,%s是sql语句的参数和字符串里面的%s不一样,不要加上引号
sql = "select * from students where name = %s"
cursor.execute(sql,("三",))

防止sql注入多个参数的使用

import pymysql

if __name__ == '__main__':
    conn = pymysql.connect(host='localhost',
                           port=3306,
                           user='root',
                           password='qianli01',
                           database='pyhon3',
                           charset='utf8')

    cursor = conn.cursor()

    sql = "insert into students(name,age) values(%s,%s)"

    # 插入数据,多个参数
    try:
        # 执行sql语句的传入参数,参数类型可以是元组,列表,字典
        cursor.execute(sql,["力",20])
        # 提交数据
        conn.commit()
    except Exception as e:
        # 撤销操作
        conn.rollback()
    finally:
        cursor.close()
        conn.close()

相关文章

网友评论

      本文标题:python学习笔记-数据库09_pyMySQL

      本文链接:https://www.haomeiwen.com/subject/eatnbktx.html