Python3操作MySQL8数据库

本章用到的软件为:软件 : pycharm专业版   数据库:MySQL 8.0.28 

pycharm插件 : pymysql

本章分为理论与实操,软件插件请自行准备好  

如果初学者理论看的费劲,可以对照实操一点点看,稍微有些基础就差不多可以看懂的。

基础理论

        数据连接对象主要是提供获取数据库游标对象和提交/回滚事务的方法,以及关闭数据库

1、获取连接对象

        连接数据库需要使用 pymysql.connect() 函数,该函数有多个参数,具体使用哪些参数取决于数据库的类型。

        connect()函数常用参数说明

参数 说明
dsn 数据源名称,给出改参数表示数据库依赖
user 用户名
password 用户密码
host 主机名或IP地址
database 数据库名称

 2、连接对象的方法

        connect()函数返回连接对象,这个对象表示当前和数据库的会话状态。

连接对象支持的方法以及说明 

方法 说明
close() 关闭数据库连接
commit() 提交事务
rollback() 回滚事务
cursor() 获取游标对象,操作数据库,如执行DML语句操作,调用存储过程等

3、游标对象

        游标对象代表数据库中的游标,用于指示抓取数据操作的上下文。主要提供执行SQL语句、调用存储过程、获取查询结果等方法。

        可以通过使用连接对象的 cursor 方法,可以获取游标对象。

游标对象的方法/属性以及说法

方法/属性 说明
callproc(procname,[parameters]) 调用存储过程,需要数据库的支持
close() 关闭当前游标
execute(operation,[parameters]) 执行数据库操作,SQL语句或者数据库命令执行
executemany(operation,sql_of_params) 用于批量操作,比如批量更新
fetchone() 获取单条数据结果
fetchmany() 获取指定数量的记录
fetchall() 获取多条数据
nextset() 跳至下一个可用的结果
arraysize 指定使用fetchmany方法获取的行数,默认为1
setinputsizes(*args) 设置在调用execute*()方法时分配的内存区域大小
setoutputsizes(*args) 设置列缓冲区大小,对大数据列入LONGS和BLOBS尤其有用

实操

1、使用pymysql连接MySQL数据库

格式:

import pymysql as m

# 打开数据库进行链接 host 主机名或ip  user:用户名 password:密码 database:数据库名称
db = m.connect(host="localhost", user="user", password="User.123", database="Practice")
# 使用cursor方法创建一个游标对象
cursor = db.cursor()
# 使用 execute 方法执行sql 查询
cursor.execute("select * from app_handoverinfo;")
# 使用 fetchall 方法获取多条数据  单条数据用 fetchone()
data = cursor.fetchall()
# 输出数据
print(data)
db.close() # 关闭数据库  

 # 使用完后记得关闭数据库
#原因:python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响。

2、使用pymysql创建数据表

import pymysql as m

# 打开数据库进行链接 host 主机名或ip  user:用户名 password:密码 database:数据库名称
db = m.connect(host="localhost", user="user", password="User.123", database="Practice")
# 使用cursor方法创建一个游标对象
cursor = db.cursor()
#cursor.execute("drop table test1;") #如果库中有该表则删除该表重新创建

# 使用sql语句去创建一个数据表
sql = """CREATE TABLE test1(
id INT NOT NULL AUTO_INCREMENT COMMENT 'ID',
sno INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '学号',
sName VARCHAR(20) NOT NULL COMMENT '姓名',
sex ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性别',
age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
Time TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入学时间',
-- Time DATE NOT NULL DEFAULT '1000-01-01' COMMENT '入学时间', # 注意设定默认值的时候 NOW 以及其他函数不管用
PRIMARY KEY(id),
INDEX(sName),
UNIQUE(sno)  # 写法误区 切勿在最后一行的时候  加逗号 !
)ENGINE INNODB CHARSET utf8mb4 COLLATE utf8mb4_bin AUTO_INCREMENT=10;"""  # 注意用三个引号引起来不然会报错

# 使用 execute 方法执行sql
cursor.execute(sql)
cursor.execute("show create table test1;")
# 使用 fetchall 方法获取多条数据  单条数据用 fetchone()
data = cursor.fetchall()
# 输出数据
print(data)  
db.close()
# 关闭数据库

 3、操作MySQL数据表

批量插入数据方法

# -*- coding: UTF-8 -*-

import pymysql as m

# 打开数据库进行链接 host 主机名或ip  user:用户名 password:密码 database:数据库名称
db = m.connect(host="localhost", user="user", password="User.123", database="Practice")
# 使用cursor方法创建一个游标对象
cursor = db.cursor()
# 数据列表
data = [(1, "张三", "男", "25",),
        (2, "李四", "女", "20"),
        (3, "王五", "保密", "23")
        ]

try:
    # 执行SQL语句 插入多条数据
    cursor.executemany("insert into test1(sno,sName,sex,age) values(%s,%s,%s,%s);", data)
    # 提交数据
    db.commit()
    print("成功")
except:
    # 发生错误回滚
    db.rollback()
    print("失败")
cursor.execute("select * from test1;")
select = cursor.fetchall()
# 输出数据
print(select)
db.close()
# 关闭数据库

猜你喜欢

转载自blog.csdn.net/weixin_58279299/article/details/126286897