python基础篇-python操作mysql,,本篇对于Python


本篇对于Python操作MySQL主要使用两种方式:

原生模块 pymsqlORM框架 SQLAchemy

pymysql

下载安装

pip3 install pymysql   #pip3命令的路径:安装路径下的Scripts目录# 下载 pymysql到本地# 解压到执行目录 # python2,默认无pip命令# python3,默认自带pip3命令 python3 -m pip install --upgrade pip 更新pip#https://pypi.python.org/pypi  模块源

使用操作

1.执行sql语句

 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import pymysql 4    5 # 创建连接 6 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘,charset=‘utf8‘) 7 # 创建游标(创建连接只是打开了数据库,要想取数据需要通过游标来取) 8 cursor = conn.cursor() 9   10 # 执行SQL,并返回受收影响行数(即有一个返回值)11 effect_row = cursor.execute("update hosts set host = ‘1.1.1.2‘")12 cursor.execute("insert into class(caption) values(‘全栈二班‘)") 13 14 # 执行SQL,并返回受影响行数,插入多行使用executemany15 #effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) 16 effect_row = cursor.execute("delete from score where sid = 3")17 18 inp = input("请输入IP地址")  19 cursor.execute("insert into hosts(host) values(%s)",inp)
20
21 cursor.execute("select * from student") #查询的数据从数据库中取出保存在内存中
22 result1 = cursor.fetchall()
23 print(result1) #输出查询的结果
24 result2 = cursor.fetchone()
25 print(result2) #输出查询的第一条结果
26 result3 = cursor.fetchmany(3)
27 print(result3) #输出查询的前n条结果
2822 # 提交,不然无法保存新建或者修改的数据23 conn.commit()24 25 # 关闭游标26 cursor.close()27 # 关闭连接28 conn.close()

2.获取查询数据

 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import pymysql 4    5 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘) 6 cursor = conn.cursor() 7 cursor.execute("select * from hosts") 8    9 # 获取第一行数据10 row_1 = cursor.fetchone()11   12 # 获取前n行数据13 # row_2 = cursor.fetchmany(3)14 # 获取所有数据15 # row_3 = cursor.fetchall()16   17 conn.commit()18 cursor.close()19 conn.close()

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

cursor.scroll(1,mode=‘relative‘) # 相对当前位置移动即指针相对当前位置往下走一个,负数表示往上走cursor.scroll(2,mode=‘absolute‘) # 相对绝对位置移动即指针回到第2个位置

3.sql注入

  无需用户名和密码就可以实现对数据库进行插入操作

 1 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘) 2 #正常应采用以下的方式,不会出现安全问题 3 cursor.execute(‘select username,password from userinfo where username=%s and password=%s‘,(‘alex‘,123)) 4 result = cursor.fetchone() 5 print(result) 6  7 #字符串拼接会出现安全问题 8 #可正常执行: 9 sql = ‘select username,password from userinfo where username="%s" and password="%s"‘10 sql = sql %(‘alex‘,123)11 cursor.execute(sql)12 result = cursor.fetchone()13 print(result)14 15 #不能执行16 sql = ‘select username,password from userinfo where username="%s" and password="%s"‘
17 sql = sql %(‘alex‘,1236)18 cursor.execute(sql)19 result = cursor.fetchone()20 print(result)21 22 #可正常执行:即密码错误也能取到数据23 sql = ‘select username,password from userinfo where username="%s" and password="%s"‘
24 sql = sql %(‘alex‘‘ -- ‘,1236) #‘select username,password from userinfo where username="alex‘‘ -- " and password="%s"‘ 后面的就注释掉
#sql = sql %(‘alex‘‘ or 1=1 -- ‘,1236) 即使不存在用户名也成立即命令也能执行25 cursor.execute(sql)26 result = cursor.fetchone()27 print(result)

4.fetch数据类型

关于默认获取的数据是元祖类型,如果想要获取字典类型的数据,即:

 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import pymysql 4    5 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘) 6    7 # 游标设置为字典类型 8 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 9 
10 11 result = cursor.fetchone()12 13 conn.commit()14 cursor.close()15 conn.close()

5.获取新创建数据自增ID

 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import pymysql 4    5 conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘) 6 cursor = conn.cursor() 7 cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) 8 conn.commit() 9 cursor.close()10 conn.close()11   12 # 获取最新自增ID13 new_id = cursor.lastrowid

python基础篇-python操作mysql

评论关闭