2022年 11月 7日

Python中如何实现与数据库的交互

在Python中如何实现与数据库(MySQL)的交互?
python中提供了一个第三方库:pymysql
首先需要安装:pip install pymysql

源码解析

首先看一段pymysql中的源码:

def __init__(self, host=None, user=None, password="",
                 database=None, port=0, unix_socket=None,
                 charset='', ......):
  • 1
  • 2
  • 3

主要参数解析
host:mysql服务器所在的主机的IP;(必要参数
user:用户名;(必要参数
password:密码;(必要参数
database:所要操作的数据库名;
port:连接mysql的主机的端口号,默认为3306;
charset:编码集,根据电脑或者数据库的编码格式进行对应设置;
其他参数视情况可进行相应设置,这里主要介绍常用参数。

案例分析
import pymysql
#1、建立连接,创建一个数据库对象
connect = pymysql.connect(host='localhost',
                          user='test',
                          password='test',
                          database='test_mysql',
                          port=3306,
                          charset='utf-8')
#2、创建游标对象
cursor = connect.cursor()
#3、执行对应的sql语句
sql = 'select * from member where id=%s'
cursor.execute(sql,args=(0010,))
connect.commit()   #需要手动提交
#4、获取结果
result1 = cursor.fetchone()   #返回所有记录中第一条记录
result2 = cursor.fetchall()   #返回所有记录
#5、关闭连接(先关闭游标,再关闭连接)
cursor.close()
connect.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
result1 output:
(1220, 'test_l_4122', datetime.datetime(2019, 5, 7, 10, 45, 11))
result2 output:
((1220, 'test_l_4122', datetime.datetime(2019, 5, 7, 10, 45, 11)),)
  • 1
  • 2
  • 3
  • 4
常用相关方法:

所有的方法操作适用于游标对象
execute(query, args=None):
执行单条sql语句,接收两个参数,第一个为要被执行的sql语句,第二个为sql中需要传入的参数(如例子中所写)。
executemany(query,args=None):
执行单条sql语句,接收两个参数,第一个为要被执行的sql语句,第二个为sql中需要传入的参数,重复执行参数,直到满足条件的截止;
fetchone():
返回执行sql语句的一条结果行;
fetchall():
返回执行的sql语句的全部结果行;
fetchmany(size):
接收size条返回结果行。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据;

常用sql操作语句(针对表中数据的操作):

增:insert into '表名'(列名1,列名2,...)values(列值1,列值2,...));
删:delete from '表名' where values='';
改:update '表名' set 列名='new 列值' where '条件';
查:select * from '表名' where '列名'='';

案例解析:
import  pymysql
connect = pymysql.connect(host='localhost',
                          user='test',
                          password='test',
                          database='test_mysql',
                          port=3306,
                          charset='utf-8')
cursor = connect.cursor()
# 更新数据
sql = 'update member set mobilephone=%s where id=%s'
# 删除数据
sql = 'delete from member where mobilephone=13112345678'
try:
    cursor.execute(sql,[13122223333,1231])   #以更新数据为例
    connect.commit()
    print("更新成功")
except:
    print("更新失败")
    connect.rollback()
cursor.close()
connect.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
总结:

① pymysql模块是默认开启mysql的事务功能的,因此,进行 “增”、 “删”、”改”的时候,一定要使用connect.commit()提交事务,否则就看不见所插入的数据。

② 进行 “增”、“删”、”改”的时候,一定要使用try…except…语句,因为万一没插入成功,其余代码都无法执行。当语句执行不成功,我们就connect.rollback()回滚到操作之前的状态;当语句执行成功,我们就connect.commit()提交事务。