首页 > 数据库 >python操作mysql数据库

python操作mysql数据库

时间:2023-04-10 15:37:13浏览次数:57  
标签:.__ python 数据库 mysql cursor student sql self conn

Python操作mysql库

python操作mysql数据库,需要使用第三库:pymysql

一、mysql安装

官网:https://www.mysql.com/

二、安装pymysql

pip install PyMySql -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

三、使用

代码演示:

import pymysql
conn = pymysql.connect(host="localhost",
                       user ="student",
                       password="student",
                       database="studentmanagementsystem",
                       port=3306,
                       charset="utf-8")
#获取游标对象
cursor =conn.cursor()
#执行
sql = "select * from student"
cursor.execute(sql)
#关闭数据库连接和游标
cursor.close()
conn.close()

1. 导包

import pymysql

2. 创建数据库连接

conn = pymysql.connect(host="localhost",
                       user ="student",
                       password="student",
                       database="studentmanagementsystem",
                       port=3306,
                       charset="utf-8")

说明:

  • host : 数据库服务器连接地址
  • user : 登录用户名
  • password : 密码
  • database : 要连接的数据库名称
  • port : 数据库连接断开(默认值3306)
  • charset :字符集(设置为utf-8)
  • autocommit :是否自动提交
    • True:自动提交
    • False:手动提交

3. 获取游标对象

cursor = conn.cursor()

说明

    • 调用数据库连接对象的cursor()方法获取游标对象

4. 执行增删改查操作

sql = "select * from student"
cursor.execute(sql)

说明

  • 调用游标对象的execute()方法来执行SQL语句
  • sql:要执行的sql语句
查询
  1. 返回查询到的第一个结果
result1 = cursor.fetchone()
print(f"查询到的第一个结果:{result1}")

image-20230410121126145

  1. 查询返回的结果数可以通过size指定,默认返回第一个查询结果,返回值:((),())

    result2 = cursor.fetchmany(size=2);
    print(f"查询2 行的数据:{result2}")
    

    image-20230410121649825

  2. 获取结果集中所有行的数据,返回值为:((),(),..)

    result3=cursor.fetchall()
    print(f"查询全部数据:{result3}")
    

    image-20230410121805988

  3. 获取结果集中的总记录数:rowcount

    count = cursor.rowcount
    print(f"student表中有{count}条数据")
    

    image-20230410122134170

增删改

数据库-增删改

思路

1.导包
try:
	程序前期,需要执行的代码
	2.创建连接对象
	3.获取游标对象
	4.执行sql
		+ 在图书表中插入一行数据
		+ 主动抛出异常
		+ 在英雄人物表中插入一行数据
	调用提交事务:conn.commit()
except:
	程序出现异常后,处理代码
	调用事务回滚:conn.rollback()
finally:
	程序结束时,需要执行的代码
	5.关闭游标
	6.关闭连接

操作

  • 自动提交(不推荐):autocommit = True
  • 手动提交(推荐):
    • 提交事务:conn.commit()
    • 回滚事务:conn.rollback

示例代码

# 1. 导包
import pymysql
# 2. 创建数据库连接
conn = pymysql.connect(host="localhost",
                       user ="student",
                       password="student",
                       database="studentmanagementsystem",
                       port=3306)
cursor = conn.cursor()
try:
#这里sql可以是update,insert,delete语句
    sql = "UPDATE student SET stu_name='ccx330' where stu_id ='00006'";
    print(sql)
    cursor.execute(sql)
# 提交事务
    conn.commit()
    print(cursor.rowcount)
except Exception as e:
#回滚事务
    conn.rollback()
    raise e
finally:
    cursor.close()
    conn.close()

image-20230410122809474

四、封装工具类

一般数据库信息会单独放在一个地方

  1. 单独的py文件
  2. 存储在环境变量中
#config.py
__config = {
    "host":"127.0.0.1",
    "user":"student",
    "password":"student",
    "database":"studentmanagementsystem",
    "port":3306,
    "charset":"utf8"
}
config = __config

封装数据库文件

#db_funs.py
#导包
from config import config
class DButils(object):
    #初始化
    __conn = None
    _cursour=None
    
#DB_utils.py
import logging

import pymysql

from Python.python_SQL.config import config


class DButils():
    def __init__(self):
        self.__conn=None
        self.__cursor = None
    #创建连接

    def __get_conn(self):
        if self.__conn is None:
            self.__conn=pymysql.connect(**config)
        return self.__conn
    #获取游标

    def __get_cursor(self):
        if self.__cursor is None:
            self.__cursor = self.__get_conn().cursor()
        return self.__cursor
    #执行sql
    def exec_sql(self,sql):
        try:
            #获取游标对象
            cursor = self.__get_cursor()
            # 调用游标对象的execute方法,执行sql
            cursor.execute(sql)
            # sql = "select * from xxx"   # sql = "update   delete  insert"
            #  如果是查询
            if sql.split()[0].lower() == "select":  # sql语句中的第一个元素是不是select
                # 返回所有数据
                return cursor.fetchall()
                #  否则:
            else:
                # 提交事务
                self.__conn.commit()
                # 返回受影响的行数
                return cursor.rowcount  # 增删改返回的的影响行数rowcount

            pass
        except Exception as e:
            self.__conn.rollback()
            # 打印异常信息
            print(e)
            logging.info("数据库异常:{}".format(e))
        finally:
            self.__close_cursor()
            self.__close_conn()
    # 关闭游标
    def __close_cursor(self):
        if self.__cursor:
            self.__cursor.close()
            self.__cursor= None
    #关闭数据库
    def __close_conn(self):
        if self.__conn:
            self.__conn.close()
            self.__conn= None

测试

#main.py
from Python.python_SQL.DB_utils import DButils

if __name__ == '__main__':
    print("测试pyhon操作数据库")
    db = DButils()
    #查询
    sql = "select * from student"
    print(db.exec_sql(sql))
    #
    sql1 = "INSERT INTO student " \
           " VALUES " \
           "('00011','莫彬', 0,'2005-08-11', '黑龙江省', '15604653586', '云南省南京市崇文黄路Q座 671564','201149', '[email protected]', '发布')"
    print(db.exec_sql(sql1))
    sql = "select * from student"
    print(db.exec_sql(sql))

image-20230410125124262

注意:DButils类所在位置哈

标签:.__,python,数据库,mysql,cursor,student,sql,self,conn
From: https://www.cnblogs.com/CCX330/p/17302583.html

相关文章

  • mysql 2023-04-09 23:59:59 999 为什么会展示为第二天
    在MySQL中,日期时间类型包括DATE、TIME、DATETIME、TIMESTAMP等。其中,DATETIME和TIMESTAMP类型可以表示具体的日期和时间,包含年、月、日、时、分、秒等信息。当使用DATETIME或TIMESTAMP存储日期时间值时,如果精度达到了秒级别以上,MySQL会进行四舍五入,将精度保留到秒级别......
  • ubuntu 修改mysql的大小写不敏感
    1.进入目录径:/etc/mysql/mysql.conf.d2.修改文件mysqld.cnf文件  [mysqld]  标签下方添加  lower_case_table_names=1注意:该配置会强制将表名改为小写,如果当前存在大写的表,请将大写的表改为小写再改配置,否则原来大写的表无法删除,小写的表名也无法创建或者修改完成后......
  • Windows 下安装 MySQL 8/7(使用命令行)
    下载Mysql的zip安装包下载地址:https://mirrors.aliyun.com/mysql/MySQL-8.0/https://mirrors.163.com/mysql/Downloads/MySQL-8.0/https://mirrors.aliyun.com/mysql/MySQL-5.7/https://mirrors.163.com/mysql/Downloads/MySQL-5.7/创建my.ini配置文件文件解压,进入mysql......
  • 软件测试|超好用超简单的Python GUI库——tkinter(四)
    前言之前我们介绍了label控件,本篇文章我们将介绍button控件。Button控件是Tkinter中常用的窗口部件之一,同时也是实现程序与用户交互的主要控件。通过用户点击按钮的行为来执行回调函数,是Button控件的主要功用。首先自定义一个函数或者方法,然后将函数与按钮关联起来,最后,当用户......
  • 软件测试|超好用超简单的Python GUI库——tkinter(五)
    前言在之前,我们介绍了tkinter的button控件,label控件,今天我们介绍一下entry控件,entry控件我们可以理解为界面的内容输入框,实现GUI界面与用户的信息交互,最典型的场景就是我们在登录时需要输入的账号密码。Entry控件使用起来非常简单,下面对该控件做简单的介绍。基本语法格式如下:tk_en......
  • python找图
    importcv2fromPILimportImageGrabimportnumpyasnpimportpyautoguiif__name__=='__main__':im=ImageGrab.grab()im.save('./res/screen.png','png')img_rgb=cv2.imread('./res/screen.png')......
  • Python3网络爬虫实战之爬虫框
    ScrapySplash的安装ScrapySplash是一个Scrapy中支持JavaScript渲染的工具,本节来介绍一下它的安装方式。ScrapySplash的安装分为两部分,一个是是Splash服务的安装,安装方式是通过Docker,安装之后会启动一个Splash服务,我们可以通过它的接口来实现JavaScript页面的加载。......
  • pymysqlpool踩坑和应用
    上周部署一个web服务时用到了多线程操作mysql数据库,虽然数据可以操作入库成功,但是一直报错‘pymysql.err.InterfaceError:(0,'')’。查了下资料是因为多线程操作引起的报错,需要使用连接池管理数据库连接。chatGPT也给出了以下回答:你可以使用连接池库(如pymysqlpool、DBUtils等......
  • 这是隔5秒执行一次Python
    importtimedefsleeptime(hour,min,sec):returnhour*3600+min*60+secsecond=sleeptime(0,0,30)while1==1:time.sleep(second)print('doaction')#这是隔5秒执行一次fromwinotifyimportNotificationdefpush(title,msg,app......
  • Python的安装以及IDLE的配置
    前言本文是一个Python入门教程,主要包含的内容如下:python的安装、环境配置python自带开发环境IDLE的配置蓝桥杯报名及考试流程(重点介绍注意事项和比赛技巧)、计算机能且只能做到两件事,执行计算结果和保存计算结果,但它把这两件事都干到了极致,现在随便一台笔记本、台式机都能在一秒内执......