Mysql学习---Python操作Mysql 1231
安装PyMysql
安装PyMysql:Py3默认自带pip3安装,Py2默认无pip命令
cmd进入PyCharm的安装目录完成安装 pip3 install pymysql
安装完成的位置:E:\PyCharm 2017.2.4\Python3.2.5\Lib\site-packages
故障处理:更新一下默认的Python安装
Py下操作Mysql
PyMySQL - 专门用于操作MySQLpython模块, Py2和Py3同时兼容
- MySQLdb(py3暂时不支持MySQLdb)
基本操作:添加信息——Insert
# -*- coding:utf-8 -*-
import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test_python', charset='utf8')
# 创建游标
cursor = conn.cursor() # 默认是元组,可以更改为字典类型
# 第一种:直接插入
# 执行SQL,并返回受影响行数
insert_effect_row = cursor.execute("insert into course(cname, teacher_id) VALUES ('hhhh43hhkkhh', '2')")
inp = input('请输入姓名:')
inp2 = input('请输入教师ID:')
# 第二种:字符串拼接
# sql = 'insert into course(cname) VALUES ("%s")' %inp
# cursor.execute(sql) # 字符串拼接可以用,但是容易造成sql注入不推荐使用
# 第三种:参数传递,利用%s做占位符号,传入参数进去,PyMysql内部帮我们转换
insert_effect_row_sec = cursor.execute("insert into course(cname, teacher_id) VALUES (%s, %s)", (inp, inp2)) # 参数传递
# 第四种: 多条信息的插入
li = [
('哇哈哈1', 1),
('哇哈哈2', 2),
('哇哈哈3', 3),
]
executmany = cursor.executemany("insert into course(cname, teacher_id) VALUES (%s, %s)", li) # 传入可迭代的类型
print('executmany:', executmany) # executmany: 3 ,修改成功3条
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
基本操作:查找信息——Select
# -*- coding:utf-8 -*-
import pymysql
# 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test_python', charset='utf8')
# 创建游标
cursor = conn.cursor()
ret = cursor.execute('select * from student') # 仅仅数据加载到内存,需要fetch取值
print(ret) # 查找到结果的数量
# 第一种: 直接打印,数据量大的时候容易导致内存不够用(内部有一个指针索引)
# r = cursor.fetchall()
# print('取出所有值\n', r) # 打印结果,结果是一个元组
# 第二种: 从内存中取出来1条数据,此时数据已经加载到内存
r1 = cursor.fetchone()
print('拿出一个\n:', r1)
# 第三种: 从内存中取出来3条数据,此时数据已经加载到内存
r3 = cursor.fetchmany(3)
print('拿出三个\n:', r3)
# 第四种:操作指针取出数据
# cursor.scroll(0, mode='relative') # 相对位置,指针索引回归0, +1/-1 分别表示向上/向下
# r4 = cursor.fetchmany(3)
# print('相对索引拿出三个\n:', r4) # 从第5个开始取值 : ((5, '女', 1, '张二'), (6, '男', 1, '张四'), (7, '女', 2, '铁锤'))
cursor.scroll(0, mode='absolute') # 绝对位置,指针索引回归0
r5 = cursor.fetchmany(3)
print('绝对索引拿出三个\n:', r5) # 从第0个位置开始取值: ((1, '男', 1, '理解'), (2, '女', 1, '钢蛋'), (3, '男', 1, '张三'))
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
基本操作:更改信息——Update
# -*- coding:utf-8 -*-
import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test_python', charset='utf8')
# 创建游标
cursor = conn.cursor()
inp = input('请输入更新后的信息:')
ret = cursor.execute("update course set cname = %s where cname = '哇哈哈4'", inp)
ret2 = cursor.execute("update course set cname = %s where cname = '哇哈哈1'", inp)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
print('不存在且更新结果:', ret, '\r\n存在且更新结果:', ret2)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
基本操作:删除信息——Delete
# -*- coding:utf-8 -*-
import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test_python', charset='utf8')
# 创建游标
cursor = conn.cursor()
inp = input('请输入更新后的信息:')
ret = cursor.execute("update course set cname = %s where cname = '哇哈哈4'", inp)
ret2 = cursor.execute("update course set cname = %s where cname = '哇哈哈1'", inp)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
print('不存在且更新结果:', ret, '\r\n存在且更新结果:', ret2)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
其他操作: 更改游标的返回值为字典
# -*- coding:utf-8 -*-
import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test_python', charset='utf8')
# 创建游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select cid as id , cname as name from course') # 可以更改原理字典的key[cname]为name
print(cursor.fetchall()) # 可以根据字典取值
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
其他操作:获取自增ID
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test_python', charset='utf8')
cursor = conn.cursor()
cursor.executemany("insert into course(cname, teacher_id)values(%s,%s)", [("百事可乐", 1), ("可口可乐", 2)])
conn.commit()
# 获取最新自增ID
new_id = cursor.lastrowid
print(new_id)
cursor.close()
conn.close()
防SQL注入的方法
防SQL注入的方法:
1. 存储过程
2. 占位符拼接 切记用字符串拼接
SQL注入:更改了原来的sql语句,不推荐拼接,推荐参数传递
# -*- coding:utf-8 -*-
import pymysql # 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test_python', charset='utf8')
# 创建游标
cursor = conn.cursor()
sql = 'select * from course where cid = "%s" and cname = "%s"'
# sql = sql % ('24', '哇哈哈3') # 正常
sql = sql % ('24"-- ', '哇哈哈3') # SQL注入取值,注释掉了后面的内容
# sql = sql % ('24" or 1=1 -- ', '哇哈哈3') # SQL注入取值,后面的条件恒成立,可查询所有结果
print(sql)
ret = cursor.execute(sql);
r = cursor.fetchall()
print('执行结果:', r)
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
Mysql学习---Python操作Mysql 1231的更多相关文章
- mysql数据库----python操作mysql ------pymysql和SQLAchemy
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...
- Python使用MySQLConnector/Python操作MySQL、MariaDB数据库
使用MySQL Connector/Python操作MySQL.MariaDB数据库 by:授客 QQ:1033553122 因目前MySQLdb并不支持python3.x,而MySQL官方已经提 ...
- Python学习之==>操作MySQL
一.简介: MySQL为关系型数据库,其他关系型数据库包括Oracle.DB2.Sql Server等等.Python操作MySQL需要使用到pymsyql模块,pip安装即可. 二.操作MySQL步 ...
- python 操作 mysql基础补充
前言 本篇的主要内容为整理mysql的基础内容,分享的同时方便日后查阅,同时结合python的学习整理python操作mysql的方法以及python的ORM. 一.数据库初探 在开始mysql之前先 ...
- Python开发【第十一篇】:Python操作MySQL
本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...
- Python操作MySQL案例
最近都在学习Python代码,希望学会Python后,能给我带来更高的工作效率,所以每天坚持学习和拷代码,下面是一个Python操作MySQL的一个实例,该实例可以让更多的人更好了解MySQLdb模块 ...
- Python 操作 MySQL 的5种方式(转)
Python 操作 MySQL 的5种方式 不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Pytho ...
- Python操作MySQL[转]
本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...
- Python操作MySQL数据库9个实用实例
用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-pytho ...
随机推荐
- ClouderManager集群在Linux里浏览器默认是英文,在Win里浏览器是中文,怎么更改?(图文详解)
不多说,直接上干货! 问题详情 在这里面如何英文改中文的吗? 莫非要把linux的语言环境给改了?? 我找找网页的语言字体怎么更改下 找到对应页面,修改成中文 解决办法 刷新下,即可 欢迎大家,加入我 ...
- ELK系列~Fluentd对大日志的处理过程~16K
Fluentd是一个日志收集工具,有输入端和输出端的概念,前者主要是日志的来源,你可以走多种来源方式,http,forward,tcp都可以,后者输出端主要指把日志进行持久化的过程,你可以直接把它持久 ...
- module使用和设置
Modules environmentDescription This is a system that allows you to easily change between different v ...
- ExcelHelper----根据指定样式的数据,生成excel(一个sheet1页)文件流
/// <summary> /// Excel导出类 /// </summary> public class ExcelHelper { /// <summary> ...
- PHP的一些语句 if...else...elseif - Switch - while - for
条件语句用于基于不同条件执行不同的动作 PHP 条件语句 在您编写代码时,经常会希望为不同的决定执行不同的动作.您可以在代码中使用条件语句来实现这一 点. 在 PHP 中,我们可以使用以下条件语句: ...
- VM虚拟机安装后的网络设置
-------------------------------------------- VM的win7系统 网络设置: 1,启动前,VM中的 网络适配器:NAT 2,关闭主机和虚拟机的所有防火墙先. ...
- NPOI创建Excel批注
var hssfWorkbook = new HSSFWorkbook(); var sheet = hssfWorkbook.CreateSheet(); var patr = sheet.Crea ...
- NodeJS,MongoDB,Vue,VSCode 集成学习
NodeJS,MongoDB,Vue,VSCode 集成学习 开源项目地址:http://www.mangdot.com
- Java常用的排序算法三
Merge Sort :归并排序:用递归的思想,分解成单个元素的排序,在归并 代码: import java.util.*; public class MergeSort { public stati ...
- JS 教程
1简介 1.JavaScript 是脚本语言 1.1轻量级的编程语言 1.2可插入 HTML 页面的编程代码 1.3可由所有的现代浏览器执行 2.您将学到什么 2.1JavaScript:写入 HTM ...