MySQL 系列 | Python 操作MySQL

0. 引言

1. 安装 pymysql 模块

pip install pymysql

2. 基本使用

import pymysql
# 1. 创建数据库连接
conn = pymysql.connect(host="localhost", 
						port=3306, 
						user="root", 
						passwd="123", 
						db="", 
						charset="utf8") #注意:charset='utf8' 不能写成utf-8
# 2. 创建游标
cursor = conn.cursor()

# 3. 执行SQL语句, 并返回受影响的行数
effect_rows = cursor.execute("select version()");
print(effect_rows)

# 4. 使用fetchone()获取单条数据
ret = cursor.fetchone()

print(ret, type(ret))

# 5.提交
conn.commit()

# 6. 关闭游标
cursor.close()

# 7. 关闭数据库连接
conn.close()

3. 插入数据

  • 使用execute() 执行sql语句
import pymysql
 
# 打开数据库连接
conn = pymysql.connect(host="localhost",
					 port=3306,
					 user="root",
					 passwd="123",
					 db="studemo" )
 
# 使用cursor()方法获取操作游标 
cursor = conn.cursor()
 
# SQL 插入语句
sql = """INSERT INTO staff(emp_name,
         emp_gender, emp_age, hire_date, post)
         VALUES ('小明', 'male', 20, '2019-06-30', '研发工程师')"""
try:
   cursor.execute(sql) # 执行sql语句
   conn.commit()         # 提交到数据库执行
except:
   conn.rollback()       # 如果发生错误则回滚
 
# 关闭数据库连接
conn.close()
  • sql语句执行错误,则回滚,例子如下:
import pymysql
 
# 打开数据库连接
conn = pymysql.connect(host="localhost",
					 port=3306,
					 user="root",
					 passwd="123",
					 db="studemo",
					 charset="utf8")
 
# 使用cursor()方法获取操作游标 
cursor = conn.cursor()


# 错误的sql语句
sql = "INSERT INTO staff(emp_name, emp_gender, emp_age, hire_date, post) VALUES (%s, %s, %s, %s, %s)" % ('Jack', 'male', 20, '2019-06-30', '研发工程师')
# 正确的sql语句
# sql = "INSERT INTO staff(emp_name, emp_gender, emp_age, hire_date, post) VALUES ('%s', '%s', '%s', '%s', '%s')" % ('Jack', 'male', 20, '2019-06-30', '研发工程师')

try:
	cursor.execute(sql) # 执行sql语句
	conn.commit()         # 提交到数据库执行
except Exception as e:
	print(e)
	conn.rollback()       # 如果发生错误则回滚
 

# 获取最新的自增ID
last_new_id = cursor.lastrowid
print(last_new_id)
# 关闭数据库连接
conn.close()
  • 使用executemany() 插入多条数据
  • 使用cursor.lastrowid 获取最新自增ID
import pymysql
 
# 打开数据库连接
conn = pymysql.connect(host="localhost",
					 port=3306,
					 user="root",
					 passwd="123",
					 db="studemo",
					 charset="utf8")
 
# 使用cursor()方法获取操作游标 
cursor = conn.cursor()
 
try:
	cursor.executemany("insert into staff(emp_name,emp_gender, emp_age, hire_date, post)values(%s,%s,%s,%s,%s)", [('张晓晓', 'male', 20, '2019-06-30', '研发工程师'),('张大大', 'male', 20, '2019-06-30', '研发工程师')])
	conn.commit()         # 提交到数据库执行
except Exception as e:
	print(e)
	conn.rollback()       # 如果发生错误则回滚
 
# 获取最新的自增ID
last_new_id = cursor.lastrowid
print(last_new_id)

# 关闭数据库连接
conn.close()

4. 修改数据

import pymysql
 
# 打开数据库连接
conn = pymysql.connect(host="localhost",
					 port=3306,
					 user="root",
					 passwd="123",
					 db="studemo",
					 charset="utf8")
 
# 使用cursor()方法获取操作游标 
cursor = conn.cursor()

try:
	# 使用execute() 方法执行sql语句
	cursor.execute("update staff set emp_age = 30 where emp_gender= '%s'" % ('male'))
	# 提交
	conn.commit()
except:
	# 发送错误则回滚
	conn.rollback()

# 关闭数据库连接
conn.close()

5. 查询数据

  • 使用 fetchone()方法获取单条数据
  • 使用 fetchmany() 或者fetchall() 方法获取多条数据
import pymysql
 
# 打开数据库连接
conn = pymysql.connect(host="localhost",
					 port=3306,
					 user="root",
					 passwd="123",
					 db="studemo",
					 charset="utf8")
 
# 使用cursor()方法获取操作游标 
cursor = conn.cursor()


# 使用execute() 方法执行sql语句
cursor.execute("select * from staff")


# 获取第一条数据
result_one = cursor.fetchone()
print(result_one, type(result_one))

# 获取获取前n条
result_many = cursor.fetchmany(5)
print(result_many, type(result_many))

# 获取所有数据
result_all = cursor.fetchall()
print(result_all, type(result_all))
 

# 关闭数据库连接
conn.close()
  • fetchXXX方法默认返回的每条数据是元组类型。
  • 如果想要使得获取到每条数据为字典类型,需要在创建游标对象时进行如下设置:
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

6. 删除数据

import pymysql
 
# 打开数据库连接
conn = pymysql.connect(host="localhost",
					 port=3306,
					 user="root",
					 passwd="123",
					 db="studemo",
					 charset="utf8")
 
# 使用cursor()方法获取操作游标 
cursor = conn.cursor()

try:
	# 使用execute() 方法执行sql语句
	cursor.execute("delete from staff where emp_age = %s" % (23))
	# 提交
	conn.commit()
except:
	# 发送错误则回滚
	conn.rollback()

# 关闭数据库连接
conn.close()
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页