github:https://github.com/PyMySQL/PyMySQL
Python3 MySQL 数据库连接 - PyMySQL 驱动:https://www.runoob.com/python3/python3-mysql.html
pymysql 是线程安全的( 搜索 thread,可以看到 thread_safe=1,同时函数 thread_safe() 返回 True ):https://github.com/PyMySQL/PyMySQL/blob/main/pymysql/__init__.py
Mysql 如果数据存在则更新,不存在则插入
:https://blog.csdn.net/zhou16333/article/details/95867827
1、PyMySQL 安装
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。
PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL
安装 PyMySQL 的 Python 包:pip3 install PyMySQL
2、数据库连接
连接数据库前,请先确认以下事项:
- 已经创建了数据库 TESTDB.
- 在 TESTDB 数据库中您已经创建了表 EMPLOYEE
- EMPLOYEE 表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
- 连接数据库 TESTDB 使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用 root 用户名及其密码,Mysql 数据库用户授权请使用 Grant 命令。
- 已经安装了 Python MySQLdb 模块。
- 如果您对sql语句不熟悉,可以访问 SQL基础教程
示 例:
链接 Mysql 的 TESTDB 数据库:
- import pymysql
-
- # 打开数据库连接
- db = pymysql.connect("localhost","testuser","test123","TESTDB" )
-
- # 使用 cursor() 方法创建一个游标对象 cursor
- cursor = db.cursor()
-
- # 使用 execute() 方法执行 SQL 查询
- cursor.execute("SELECT VERSION()")
-
- # 使用 fetchone() 方法获取单条数据.
- data = cursor.fetchone()
-
- print ("Database version : %s " % data)
-
- # 关闭数据库连接
- db.close()
3、使用
创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
- import pymysql
-
- # 打开数据库连接
- db = pymysql.connect("localhost","testuser","test123","TESTDB" )
-
- # 使用 cursor() 方法创建一个游标对象 cursor
- cursor = db.cursor()
-
- # 使用 execute() 方法执行 SQL,如果表存在则删除
- cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
-
- # 使用预处理语句创建表
- sql = """CREATE TABLE EMPLOYEE (
- FIRST_NAME CHAR(20) NOT NULL,
- LAST_NAME CHAR(20),
- AGE INT,
- SEX CHAR(1),
- INCOME FLOAT )"""
-
- cursor.execute(sql)
-
- # 关闭数据库连接
- db.close()
查询 数据
Python 查询 Mysql 使用 fetchone() 方法获取单条数据,使用 fetchall() 方法获取多条数据。
- fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
- fetchall(): 接收全部的返回结果行.
- rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
查询 EMPLOYEE 表中 salary(工资)字段大于 1000 的所有数据:
- import pymysql
-
- # 打开数据库连接
- db = pymysql.connect("localhost","testuser","test123","TESTDB" )
-
- # 使用cursor()方法获取操作游标
- cursor = db.cursor()
-
- # SQL 查询语句
- sql = "SELECT * FROM EMPLOYEE \
- WHERE INCOME > %s" % (1000)
- try:
- # 执行SQL语句
- cursor.execute(s