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")