day60 pymysql
预知扩展内容,详见地址如下(关于数据库备份和恢复)
http://www.cnblogs.com/linhaifeng/articles/7525619.html
我们一般写程序都是在py文件里面,那么当我们需要跟数据库连接的时候,如果在另外开启一个数据库系统的话就会很费时费力,这个时候我们的pycharm就给我们提供了这种便利,就是使用pycharm来连接我们的数据库系统,然后进行操作,直接使用pycharm一个程序就可以了,方便快捷,我们的一切行为以提高工作效率为宗旨.所以要善用工具
我们先要在我们的pycharm里面下载一个pycharm模块,然后再py文件的顶部引用这个模块就可以投入使用了,[这里需要注意的是我们在pycharm3版本里面使用的是pymycql这个模块,
而在pycharm2版本里面使用的是mysqldb这个模块,这是e2和3的区别]
我们先来看一下在pycharm里面如何来调出mysql的窗口来
如图所示:
在上图中我们可以看到databases这个按钮,这里就是我们的mysql数据库窗口,点进去就可以看到我们之前在mysql的辅助工具里面的看到的类似的页面,然后就能根据提示操作了,
在这里操作完之后需要根据提示有一个用户名和密码的输入框,需要授权之后才可以访问数据库.
这里点击之后我们就可以调出执行面板
执行面板就长这样:
然后就可以根据需求我们把库/表格进行新建,修改,查询等操作建立或者修改完成后记得提交,在这里进行提交操作:
接下来就是一些python和mysql相结合的时候我们需要注意的一些语法问题,
然后 就是对数据库进行操作
首先是引入模块,import pymysql
然后就是建立连接,就像我们在网络编程里面服务端和客户端建立的连接一样的,需要绑定IP和端口,在这里我们需要绑定的不仅仅是IP和端口这两项,还有其他的参数都需要绑定,
conn=pymysql.connect(host="localhost",database="book_list",user="root",password="123",charset="utf8") 我们的端口是默认的3306,一般不写出来,可以写出来,
我们这里的conn是固定的变量,=是赋值,没什么好难理解的,
pymysql是模块,我们引入的模块,必须要写上,.connect是连接,也是固定的,就像客户端和服务端建立连接的时候一样用.connect来操作,然后就是括号里面的参数了,
host是IP地址,我们使用自己本地的就直接用localhost,
database是数据库的名字,
user是授权用户账户名
password是授权用户的密码
charset是字符编码,我们一般都是设定成为utf8[这一句是必须要加上的,否则取出来的sql语句里面如果有中文的话会出现乱码,这个参数是必须要加上的]
我们在mysql里面使用数据库的时候会有一个光标一直在闪烁提示我们输入命令,然后我们输入命令之后就可以得出结果,所以我们在python里面连接上数据库之后还需要获取这个光标然后我们就可以输入sql命令了
caa = conn.cursor() 这里我们使用的从你这个变量然后调用cursor这个方法就能够获取到这个光标,而=右边这个变量名字是随意起的,改成abc=conn.cursor()也是没有问题的
紧接着我们就要开始着手写sql语句了,
sql = "show databases;"
ret = caa.execute(sql) 我们在这里执行了上面的sql语句,要用到执行的语法---->execute()括号里面是需要执行的提前存好的sql语句赋值的变量,执行前需要使用到光标获取所赋值的变量
caa.close() 我们需要把光标关闭
conn.close() 然后再关闭掉连接 [就像我们在客户端和服务端需要关闭的网络连接是一样的]
print(ret) 这里我们打印出来最终的结果
接下来就是数据库的增删改查操作了,都是比较简单基础的东西,我们之前的mysql里面都讲过了,只是牵扯到了一些
python里面的语法,写的时候有些格式的问题,但是那些都比较简单,然后我们写几个例子也就记住了.基本套路就是上面的那些,
增:
按照上面的套路来,我们举一个增加内容的例子,
# 导入模块
import pymysql
# 连接database
conn = pymysql.connect(host="IP地址",user="用户名",password="密码",database="库名",charset="utf8")
# 得到一个可以执行的sql语句的光标对象
cu = conn.cursor()
# 定义要执行的sql语句
sql = "insert into userinfo(name,age) values (%s, %s);''
username = "alex"
age = 18
# 执行sql语句
cu.execute(sql, [username, age])
# 提交事物
conn.conmit()
cu.close()
conn.close() 数据回滚事件
导入模块
import pymysql
# 连接database
conn = pymysql.connect(host="ip地址", user="用户名", password="密码", database="库名",charset="utf8")
# 得到一个可以执行sql语句的光标对象
cur = conn.cursor()
sql = "insert into user158(name, age) values (%s, %s);"
username = "alex"
age = 90
try:
# 执行sql语句
cur.execute(sql, [username, age])
# 提交事物 这里跟我们mysql里面学过的事物是一样的,sql没有问题就# 执行提交操作
conn.commit()
except Exception as e:
# 有异常, 回滚事物,如果有异常的话就直接回滚了,不会提交事物
conn.rollback()
cur.close()
conn.close()
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host="localhost", database="book_list", user="root", password="123", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "INSERT INT[]O userinfo(pwd, name) VALUES (%s, %s);" # 这里我们设定一个不成立的sql语句,所以我们会捕捉这里的异常然后回滚它,如果设定一个成立的sql,那么我们就可以提交它
pwd = "Alex"
name = "alex"
try:
# 执行SQL语句
cursor.execute(sql, [pwd, name])
# 提交事务
conn.commit()
# 提交之后,获取刚插入的数据的ID
last_id = cursor.lastrowid
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
# print(last_id) 批量执行操作:
批量执行 # 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
data = [("Alex", 18), ("Egon", 20), ("Yuan", 21)] # 我们在这里传入多个数据,用元祖或者列表的形式
try:
# 批量执行多条插入SQL语句
cursor.executemany(sql, data)
# 提交事务
conn.commit()
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
删:
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host="localhost", database="book_list", user="root", password="123", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# sql = "INSERT INT[]O userinfo(pwd, name) VALUES (%s, %s);"
# pwd = "Alex"
# name = "alex"
sql = "delete from userinfo where id=%s;"
try:
# 执行SQL语句
cursor.execute(sql, [1])
# 提交事务
conn.commit()
# 提交之后,获取刚插入的数据的ID
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close() 改:
# 导入pymysql模块
import pymysql
# 连接database
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 修改数据的SQL语句
sql = "UPDATE userinfo SET age=%s WHERE name=%s;"
username = "Alex"
age = 80
try:
# 执行SQL语句
cursor.execute(sql, [age, username])
# 提交事务
conn.commit()
except Exception as e:
# 有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
查:
import pymysql
conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
cursor = conn.cursor()
sql = "SELECT id,name,age from USER1 WHERE id=1;"
cursor .execute(sql)
ret = cursor.fetchone() # 获取单挑数据
# ret = cursor.fetchall() # 获取所有数据,得到的是一个元祖
# ret = cursor.fetchmany(2) # 括号里面是自定义的数字,指定获取几条数据
cursor.close()
conn.close()
print(ret)
光标按照绝对/相对位置移动
import pymysql # 连接
conn = pymysql.connect(host="localhost", user="root", password="root1234", database="s8", charset="utf8") # 没有-
# 获取光标
cursor = conn.cursor()
# 写sql语句
sql = "select * from userinfo;" # 执行SQL语句
ret = cursor.execute(sql)
print("-->",ret)
# 一次取一条
# print(cursor.fetchone())
# print(cursor.fetchone())
# print(cursor.fetchone())
# 一次取所有
# print(cursor.fetchall())
# 一起取三条
# print(cursor.fetchmany(3)) # 进阶用法
print(cursor.fetchone())
print(cursor.fetchall())
print(cursor.fetchone())
# 移动取数据的光标
cursor.scroll(-2) # 默认是相对移动
print(cursor.fetchone())
# 按照绝对位置去移动
cursor.scroll(4, mode="absolute")
print(cursor.fetchone())
cursor.close()
conn.close()
按照绝对位置移动是没有什么好理解的,就是从第一条数据开始作为起点,在它的基础上进行移动
而我们用得最多的不是绝对位置,而是相对位置
这里是一些例子,可以便于我们理解:
import pymysql
conn = pymysql.connect(
host="localhost",
user="root",
database="book_list",
password="",
charset="utf8"
) abc = conn.cursor() sql = "select id, pwd, name from userinfo;" abc.execute(sql) # print("---->", ret)
# abc.scroll(0) # 我们这里的索引值是从0开始的,
# 也就是说我们的第一行数据的索引值是0,第二行的索引值是1,而第三行的索引值是2依次类推
# print(abc.fetchone())
# print(abc.fetchone())
# print(abc.fetchmany(2))
# print(abc.fetchall())
# abc.scroll(4) # 这里是相对于我们的光标目前所在的位置进行移动的,
# print(abc.fetchone())
# print(abc.fetchmany(2))
# print(abc.fetchall())
# abc.scroll(-4) # 我们的程序走到这一步的时候我们已经把所有的数据都取出来了,
# 这个时候把光标移动到当前位置(也就是末尾的位置的时候)的相对位置,
# 就是相当于在末尾的位置的基础上-4的位置,也就是从下往上移动了4个格,就到了倒数第4个位置上面,然后就可以接着去取值了
# print(abc.fetchone())
# print(abc.fetchall())
abc.scroll(1)
print(abc.fetchone())
abc.scroll(2)
print(abc.fetchone())
abc.scroll(-3)
print(abc.fetchone())
abc.scroll(2)
print(abc.fetchone())
abc.close()
conn.close()
我们先定义一个scroll(2)
然后fetchone()得到一个数据,看看它所在的位置,假设它是a
再定义一个scroll(3)
fetchone()得到一个数据,这个时候就可以得出对比的结果了,我们要这样去举例子才能明白怎么回事,
这里的结果假设它是b,就是我们在上面的scroll(2),fetchone()得到的a的基础上再进行移动,移动了3个数据的位置,才得到这里的b
这里就是相对移动,我们不传参数的话就是默认相对位置移动,
总结,我们的相对位置移动这样更加灵活,比如我们取数据的时候取到了第4条,然后想返回去取第2条的时候就把光标-2移动到第二条就可以了,这样更加灵活
获取插入的最后一条数据的自增id使用
lastrowid方法
如下例:
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='',database='egon')
cursor=conn.cursor() sql='insert into userinfo(name,password) values("xxx","123");'
rows=cursor.execute(sql)
print(cursor.lastrowid) #在插入语句后查看 conn.commit() cursor.close()
conn.close()
pymysql的权限管理操作:
#授权表
user #该表放行的权限,针对:所有数据,所有库下所有表,以及表下的所有字段
db #该表放行的权限,针对:某一数据库,该数据库下的所有表,以及表下的所有字段
tables_priv #该表放行的权限。针对:某一张表,以及该表下的所有字段
columns_priv #该表放行的权限,针对:某一个字段 #按图解释:
user:放行db1,db2及其包含的所有
db:放行db1,及其db1包含的所有
tables_priv:放行db1.table1,及其该表包含的所有
columns_prive:放行db1.table1.column1,只放行该字段
#创建用户
create user 'egon'@'1.1.1.1' identified by '';
create user 'egon'@'192.168.1.%' identified by '';
create user 'egon'@'%' identified by ''; #授权:对文件夹,对文件,对文件某一字段的权限
查看帮助:help grant
常用权限有:select,update,alter,delete
all可以代表除了grant之外的所有权限 #针对所有库的授权:*.*
grant select on *.* to 'egon1'@'localhost' identified by ''; #只在user表中可以查到egon1用户的select权限被设置为Y #针对某一数据库:db1.*
grant select on db1.* to 'egon2'@'%' identified by ''; #只在db表中可以查到egon2用户的select权限被设置为Y #针对某一个表:db1.t1
grant select on db1.t1 to 'egon3'@'%' identified by ''; #只在tables_priv表中可以查到egon3用户的select权限 #针对某一个字段:
mysql> select * from t3;
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | egon1 | 18 |
| 2 | egon2 | 19 |
| 3 | egon3 | 29 |
+------+-------+------+ grant select (id,name),update (age) on db1.t3 to 'egon4'@'localhost' identified by '';
#可以在tables_priv和columns_priv中看到相应的权限
mysql> select * from tables_priv where user='egon4'\G
*************************** 1. row ***************************
Host: localhost
Db: db1
User: egon4
Table_name: t3
Grantor: root@localhost
Timestamp: 0000-00-00 00:00:00
Table_priv:
Column_priv: Select,Update
row in set (0.00 sec) mysql> select * from columns_priv where user='egon4'\G
*************************** 1. row ***************************
Host: localhost
Db: db1
User: egon4
Table_name: t3
Column_name: id
Timestamp: 0000-00-00 00:00:00
Column_priv: Select
*************************** 2. row ***************************
Host: localhost
Db: db1
User: egon4
Table_name: t3
Column_name: name
Timestamp: 0000-00-00 00:00:00
Column_priv: Select
*************************** 3. row ***************************
Host: localhost
Db: db1
User: egon4
Table_name: t3
Column_name: age
Timestamp: 0000-00-00 00:00:00
Column_priv: Update
rows in set (0.00 sec) #删除权限
revoke select on db1.* from 'alex'@'%'; 例如:
在cmd里面执行
revoke select,insert,delete,update *.* from 'root'@'192.168.15.13'
或者在navicat,pycharm里面都可以执行,加上;即可,
最后我们需要在任务管理器里面的服务里面找到mysql服务然后把它重启服务即可彻底解除绑定 权限相关操作
权限命令:
day60 pymysql的更多相关文章
- pymysql 模块
Python3连接MySQL 介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL ...
- day60 django入门
目录 一.静态文件配置 1 引子 2 如何配置 1 在settins.py中的具体配置 2 静态文件的动态解析(html页面中) 二.request对象方法初识 三.pycharm链接数据库(mysq ...
- pyMysql
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
- Python 3.x 连接数据库(pymysql 方式)
==================pymysql=================== 由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 ...
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- 杂项之pymysql连接池
杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普通的pymysql插入100W条 ...
- Python3中使用PyMySQL连接Mysql
Python3中使用PyMySQL连接Mysql 在Python2中连接Mysql数据库用的是MySQLdb,在Python3中连接Mysql数据库用的是PyMySQL,因为MySQLdb不支持Pyt ...
- Python之路-python(mysql介绍和安装、pymysql、ORM sqlachemy)
本节内容 1.数据库介绍 2.mysql管理 3.mysql数据类型 4.常用mysql命令 创建数据库 外键 增删改查表 5.事务 6.索引 7.python 操作mysql 8.ORM sqlac ...
- python pymysql和orm
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1. 安装 管理员打开cmd,切换到python的安装路径,进入到Scripts目录下(如:C:\Users\A ...
随机推荐
- HashMap遍历的两种方式,推荐使用entrySet()
第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { ...
- 35)django-验证码
一:验证码原理 第一次访问GET,后台: 1.创建一张图片 2.在图片中写入随机字符串 3.将图片写到制定文件 4.打开指定目录文件,读取内容 5.把生成的验证码保存在session中 6. 通过Ht ...
- swift 实践- 03 -- UILabel
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 标签 let ...
- LoadRunner学习笔记
什么是性能测试: 简单说,功能测试是软件是否能用,性能测试是看软件好不好用: 性能测试的含义,大体来讲就是通过自动化的手段,模拟生产运行的业务压力或者相应的场景,来测试协同系统是否满足生产需要. 性能 ...
- linux符号与正则表达式
特殊符号 > 或者1> 标准输出重定向 先把文件的内容清空 再放入新的内容 >> 或 2>> 追加重定向 把内容放入文件的最后一行 1 ...
- HDU 1671 Phone List (qsort字符串排序与strncmp的使用 /字典树)
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Java链表和递归
删除链表的指定元素: public class ListNode { public int val; public ListNode next; public ListNode(int x){ val ...
- Nignx添加proxy_pass可能造成DNS解析超时的问题解决
resolver 219.149.194.55; location ^~ /bigdata { proxy_set_header Host $host; ...
- TypeScipt学习
TypeScript具有类型系统,且是JavaScript的超集.它可以编译成普通的JavaScript代码. TypeScript支持任意浏览器,任意环境,任意系统并且是开源的.Ts主要用于解决那些 ...
- vim设置Tab键和显示行号
vim ~/.vimrc set nu 这样设置方便写python代码.