安装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的更多相关文章

  1. mysql数据库----python操作mysql ------pymysql和SQLAchemy

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQ ...

  2. Python使用MySQLConnector/Python操作MySQL、MariaDB数据库

    使用MySQL Connector/Python操作MySQL.MariaDB数据库   by:授客 QQ:1033553122 因目前MySQLdb并不支持python3.x,而MySQL官方已经提 ...

  3. Python学习之==>操作MySQL

    一.简介: MySQL为关系型数据库,其他关系型数据库包括Oracle.DB2.Sql Server等等.Python操作MySQL需要使用到pymsyql模块,pip安装即可. 二.操作MySQL步 ...

  4. python 操作 mysql基础补充

    前言 本篇的主要内容为整理mysql的基础内容,分享的同时方便日后查阅,同时结合python的学习整理python操作mysql的方法以及python的ORM. 一.数据库初探 在开始mysql之前先 ...

  5. Python开发【第十一篇】:Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...

  6. Python操作MySQL案例

    最近都在学习Python代码,希望学会Python后,能给我带来更高的工作效率,所以每天坚持学习和拷代码,下面是一个Python操作MySQL的一个实例,该实例可以让更多的人更好了解MySQLdb模块 ...

  7. Python 操作 MySQL 的5种方式(转)

    Python 操作 MySQL 的5种方式 不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Pytho ...

  8. Python操作MySQL[转]

    本篇对于Python操作MySQL主要使用两种方式: 1.原生模块pymsql. 2.ORM框架SQLAchemy. pymsql pymsql是Python中操作MySQL的模块,其使用方法和MyS ...

  9. Python操作MySQL数据库9个实用实例

    用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-pytho ...

随机推荐

  1. Maven项目版本继承 – 我必须指定父版本?

    问题描述 我有两个项目:父项目:A,子项目:B 在A /pom.xml中: <groupId>com.dummy.bla</groupId> <artifactId> ...

  2. c++ 同步阻塞队列

    参考:<C++11深入应用> 用同步阻塞队列解决生产者消费者问题. 生产者消费者问题: 有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之 ...

  3. Linux笔记-Linux命令初解2

    在看linux过程中,文件属性管理是一个难点,因而作为初学者的我来说,我直接将其放在后面来慢慢研究,因而我个人觉得先学习后面一些知识点之后,回过头来将一些你所不懂的去解透,这是极好的意见事情.对了,我 ...

  4. 从零开始学JAVA(08)-使用SpringMVC4 Restful 风格引用静态文件 css/js/png

    在写完helloworld后想给网页加点样式(*.css),结果怎么也显示不了,百度了很多种方法后试行尝试,试验成功并记录下来,方便以后查看. 时隔两年,继续学习JAVA,太久没学了,忘记得差不多,还 ...

  5. 关于UI回调Invoker的实现(二)

    上篇我说到,光有一个IOperation*的指针,是无法记录这么多事件的.由于无法确定要把回调绑定到哪个事件上,因此,我们需要引入一个中间的传递机制. 没有看到前面的请先查阅上一篇 关于UI回调Inv ...

  6. Java基础教程(1)--概述

    一.什么是Java语言   Java是于1996年由Sun公司发布的一种极富创造力的面向对象的程序设计语言.它不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java ...

  7. java核心技术-NIO

    1.reactor(反应器)模式 使用单线程模拟多线程,提高资源利用率和程序的效率,增加系统吞吐量.下面例子比较形象的说明了什么是反应器模式: 一个老板经营一个饭店, 传统模式 - 来一个客人安排一个 ...

  8. golang 编码转化

    在网上搜索golang编码转化时,我们经常看到的文章是使用下面一些第三方库: https://github.com/djimenez/iconv-go https://github.com/qiniu ...

  9. fuzhou 1692 Key problem ***

    Problem 1692 Key problem Accept: 103    Submit: 553 Time Limit: 1000 mSec    Memory Limit : 32768 KB ...

  10. Java:类加载器(ClassLoader)

    听上去很高端,其实一般自定义类加载器不需要用户去实现解析的过程,只要负责实现获取类对应的.class字节流部分就ok了,摘录深入理解Java虚拟机的一段话 虚拟机设计团队把类加载阶段中的“通过一个类的 ...