Mysql(九):Python连接MySQL数据库之pymysql模块使用

Python3连接MySQL

本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。

PyMySQL介绍

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

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

PyMySQL安装

pip install pymysql

连接数据库

注意事项

在进行本文以下内容之前需要注意:

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

基本使用

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句的光标对象 6cursor = conn.cursor() 7# 定义要执行的SQL语句 8sql = """ 9CREATE TABLE USER1 ( 10id INT auto_increment PRIMARY KEY , 11name CHAR(10) NOT NULL UNIQUE, 12age TINYINT NOT NULL 13)ENGINE=innodb DEFAULT CHARSET=utf8; 14""" 15# 执行SQL语句 16cursor.execute(sql) 17# 关闭光标对象 18cursor.close() 19# 关闭数据库连接 20conn.close()

返回字典格式数据:

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句并且将结果作为字典返回的游标 6cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 7# 定义要执行的SQL语句 8sql = """ 9CREATE TABLE USER1 ( 10id INT auto_increment PRIMARY KEY , 11name CHAR(10) NOT NULL UNIQUE, 12age TINYINT NOT NULL 13)ENGINE=innodb DEFAULT CHARSET=utf8; 14""" 15# 执行SQL语句 16cursor.execute(sql) 17# 关闭光标对象 18cursor.close() 19# 关闭数据库连接 20conn.close()

注意:

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

增删改查操作

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句的光标对象 6cursor = conn.cursor() 7sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" 8username = "Alex" 9age = 18 10# 执行SQL语句 11cursor.execute(sql, [username, age]) 12# 提交事务 13conn.commit() 14cursor.close() 15conn.close()

插入数据失败回滚

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句的光标对象 6cursor = conn.cursor() 7sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" 8username = "Alex" 9age = 18 10try: 11 # 执行SQL语句 12 cursor.execute(sql, [username, age]) 13 # 提交事务 14 conn.commit() 15except Exception as e: 16 # 有异常,回滚事务 17 conn.rollback() 18cursor.close() 19conn.close()

获取插入数据的ID(关联操作时会用到)

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句的光标对象 6cursor = conn.cursor() 7sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" 8username = "Alex" 9age = 18 10try: 11 # 执行SQL语句 12 cursor.execute(sql, [username, age]) 13 # 提交事务 14 conn.commit() 15 # 提交之后,获取刚插入的数据的ID 16 last_id = cursor.lastrowid 17except Exception as e: 18 # 有异常,回滚事务 19 conn.rollback() 20cursor.close() 21conn.close()

批量执行

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句的光标对象 6cursor = conn.cursor() 7sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" 8data = [("Alex", 18), ("Egon", 20), ("Yuan", 21)] 9try: 10 # 批量执行多条插入SQL语句 11 cursor.executemany(sql, data) 12 # 提交事务 13 conn.commit() 14except Exception as e: 15 # 有异常,回滚事务 16 conn.rollback() 17cursor.close() 18conn.close()

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

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句的光标对象 6cursor = conn.cursor() 7# 修改数据的SQL语句 8sql = "UPDATE USER1 SET age=%s WHERE name=%s;" 9username = "Alex" 10age = 80 11try: 12 # 执行SQL语句 13 cursor.execute(sql, [age, username]) 14 # 提交事务 15 conn.commit() 16except Exception as e: 17 # 有异常,回滚事务 18 conn.rollback() 19cursor.close() 20conn.close()

查询单条数据

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

查询多条数据

1# 导入pymysql模块 2import pymysql 3# 连接database 4conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) 5# 得到一个可以执行SQL语句的光标对象 6cursor = conn.cursor() 7# 查询数据的SQL语句 8sql = "SELECT id,name,age from USER1;" 9# 执行SQL语句 10cursor.execute(sql) 11# 获取多条查询数据 12ret = cursor.fetchall() 13cursor.close() 14conn.close() 15# 打印下查询结果 16print(ret)

 进阶用法

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

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

Twitter的分布式自增ID算法snowflake (Java版)

概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移