博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pymysql模块
阅读量:4920 次
发布时间:2019-06-11

本文共 4484 字,大约阅读时间需要 14 分钟。

1 PyMySQL介绍

  PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

  Django中也可以使用PyMySQL连接MySQL数据库。

2 PyMySQL安装

  pip3 install pymysql

3 连接数据库

  3.1 注意事项

  • 有一个MySQL数据库,并且已经启动。
  • 有可以连接该数据库的用户名和密码
  • 有一个有权限操作的database

  3.2 基本使用

  注意:charset=“utf8”,编码不要写成"utf-8"

# 导入pymysql模块import pymysql    # 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)    # 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()    # 定义要执行的SQL语句sql = """CREATE TABLE USER1 (id INT auto_increment PRIMARY KEY ,name CHAR(10) NOT NULL UNIQUE,age TINYINT NOT NULL)ENGINE=innodb DEFAULT CHARSET=utf8;"""    # 执行SQL语句cursor.execute(sql)     # 使用 fetchone() 方法获取单条数据data = cursor.fetchone()       print(data)    # 关闭光标对象cursor.close()    # 关闭数据库连接conn.close()

4 增删改查操作

  4.1 增

import pymysqlconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)cursor = conn.cursor()sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"username = "Alex"age = 18try:    cursor.execute(sql, [username, age])    # 提交事务    conn.commit()    # 提交之后,获取刚插入的数据的ID    last_id = cursor.lastrowidexcept Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()
插入数据失败回滚+获取插入数据的ID

 

# 导入pymysql模块import pymysql# 连接databaseconn = 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()
批量执行

  4.2 删

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()sql = "DELETE FROM USER1 WHERE id=%s;"try:    cursor.execute(sql, [4])    # 提交事务    conn.commit()except Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()
View Code

 

  4.3 改

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()# 修改数据的SQL语句sql = "UPDATE USER1 SET age=%s WHERE name=%s;"username = "Alex"age = 80try:    # 执行SQL语句    cursor.execute(sql, [age, username])    # 提交事务    conn.commit()except Exception as e:    # 有异常,回滚事务    conn.rollback()cursor.close()conn.close()
View Code

 

  4.4 查(不需要commit)

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()# 查询数据的SQL语句sql = "SELECT id,name,age from USER1 WHERE id=1;"# 执行SQL语句cursor.execute(sql)# 获取单条查询数据ret = cursor.fetchone()cursor.close()conn.close()# 打印下查询结果print(ret)
查询单条语句:fetchone()

 

# 导入pymysql模块import pymysql# 连接databaseconn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)# 得到一个可以执行SQL语句的光标对象cursor = conn.cursor()# 查询数据的SQL语句sql = "SELECT id,name,age from USER1;"# 执行SQL语句cursor.execute(sql)# 获取多条查询数据ret = cursor.fetchall()cursor.close()conn.close()# 打印下查询结果print(ret)
查询多条数据:fetchall()
####### sql注入问题sql = "select * from userinfo where username ='%s' and password = '%s' "%(user,pwd)       # 会引起sql注入,如输入 alex' or 1=1 --    # sql注入原因:         执行时输入ehwuf' or 1=1 -- ,程序执行过程如下:        username ='ehwuf' or 1=1 -- '   :1=1肯定成立,语句成立;-- 后边的给注释掉了#######解决sql注入问题    # sql = "select * from userinfo where username ='%s' and password = '%s' "    sql = "select * from userinfo where username ='%(u)s' and password = '%(p)s' "       # 匹配字符串        # cursor.execute(sql,user,pwd)             # 执行,防止sql注入        # cursor.execute(sql,[user,pwd])           # 列表按顺序自动分配给每一项
sql注入问题及解决

 

5 进阶用法

# 可以获取指定数量的数据cursor.fetchmany(3)# 光标按绝对位置移动1cursor.scroll(1, mode="absolute")# 光标按照相对位置(当前位置)移动1cursor.scroll(1, mode="relative")

 

6 数据备份

  6.1 数据库的逻辑备份

#语法:# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql#示例:#单库备份mysqldump -uroot -p123 db1 > db1.sqlmysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql#多库备份mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql#备份所有库mysqldump -uroot -p123 --all-databases > all.sql

 

  6.2 数据恢复

#方法一:[root@egon backup]# mysql -uroot -p123 < /backup/all.sql#方法二:mysql> use db1;mysql> SET SQL_LOG_BIN=0;   #关闭二进制日志,只对当前session生效mysql> source /root/db1.sql

 

转载于:https://www.cnblogs.com/timetellu/p/10713322.html

你可能感兴趣的文章
拉近距离(洛谷_2136)——判断负环
查看>>
ajax请求返回null
查看>>
curl实现GET、POST请求
查看>>
实验二
查看>>
c++ c# java 调用 c++ 写的dll
查看>>
css经典布局—stick footer布局
查看>>
div学习之div中dl-dt-dd的详解
查看>>
当在hive中show&nbsp;table&nbsp;…
查看>>
随机森林(Random Forest)
查看>>
[转载]/etc/security/limits.conf解释及应用
查看>>
Python的math模块
查看>>
Linux下gcc相关
查看>>
iphone真机(越狱)通讯录导入进模拟器
查看>>
剑指offer-删除链表中重复的结点
查看>>
mybatis自动生成mapper,dao映射文件
查看>>
IntelliJ IDEA 注册码
查看>>
C 调用数学函数pow时遇到 undefined reference [已解决]
查看>>
IDEA01 创建java项目、创建web项目
查看>>
Springboot21 整合redis、利用redis实现消息队列
查看>>
AJAX 总结
查看>>