安装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. Idea与Eclipse操作代码的快捷方式

    1.Idea格式化代码的快捷键:ctrl+alt+L 2.在IDEA中创建了properties文件,发现默认中文不会自动进行unicode转码.如下 在project settings - File ...

  2. rails学习笔记: rake db 相关命令

    rails学习笔记: rake db 命令行 rake db:*****script/generate model task name:string priority:integer script/g ...

  3. AutoResetEvent和ManualResetEvent理解

    AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandle,API相同,但在使用中还是有区别的. 每次使用时虽然理解了,但由于没有去 ...

  4. C++/CLI 本地字符串和托管字符串之间的转换

    参考: https://docs.microsoft.com/zh-cn/cpp/dotnet/overview-of-marshaling-in-cpp #include "msclr/m ...

  5. 给Solr配置中文分词器

    第一步下载分词器https://pan.baidu.com/s/1X8v65YZ4gIkNQXsXfSULBw 第二歩打开已经解压的ik分词器文件夹 将ik-analyzer-solr5-5.x.ja ...

  6. 一、cent OS安装配置JDK

    到oracle官网下载JDKhttp://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 在cent OS ...

  7. 鸟哥linux私房菜学习笔记 第二章知识点

    2.1 linux一切皆文件 2.2 磁盘分区 磁盘即文件 2.2.1 磁盘连接的方式与设备文件名的关系 模糊 1.正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境下 ...

  8. 使用NOPI读取Word、Excel文档内容

    使用NOPI读取Excel的例子很多,读取Word的例子不多. Excel的解析方式有多中,可以使用ODBC查询,把Excel作为一个数据集对待.也可以使用文档结构模型的方式进行解析,即解析Workb ...

  9. CNN中tensorboard数据可视化

    1.CNN_my_test.py import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data ...

  10. cf1088D. Ehab and another another xor problem(思维)

    题意 题目链接 系统中有两个数\((a, b)\),请使用\(62\)以内次询问来确定出\((a, b)\) 每次可以询问两个数\((c, d)\) 若\(a \oplus c > b \opl ...