python学习笔记-数据库09_pyMySQL

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()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容