Mysql学习笔记(四):Python与Mysql交互--实现增删改查

简介: 如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。

创建表

create table test(
id int unsigned primary key auto_increment not null,
name varchar(150) not null,
timestamp varchar(50) not null);

数据库的增删改查

from pymysql import *
import numpy as np

# 增删改涉及到数据库的变更,查询不改变数据库

# pymysql中凡是涉及到数据库的增删改时,如果不输入commit,数据是不会插入表中,但是每次插入值之后(不提交)数据表的id字段(auto increament)还是增加的,通过show create table table名查看,目的是解决高并发
# 过程中的错误,实际应用中,数据库中值得插入属于高并发模式,哪个先抢到即先占领ID字段的值,防止后面多个插入进行提交之后造成的混乱错误.
# 不管是增删改哪一种,只要commit之后数据开始生效.
# 如果数据插入错误,可以采用回滚rollback函数实现,前提是不提交,只要一提交数据就生效,注意的是如果进行增删改操作,但是发现数据有误就不提交,且进行了rollback,如果再进行新的增删改操作并
# commit提交,因之前进行的错误增删改操作而造成的id字段增长不会倒回去,只能在之前的基础上继续增长.

class JD(object):
    def __init__(self):
        # 创建connection连接  连接对象
        self.conn = connect(host="localhost", port=3306, user='root', password='123456', database='python_test', charset='utf8')
        # 获取Cursor对象  游标对象
        self.cursor = self.conn.cursor()

    def __del__(self):
        # 关闭cursor对象
        self.cursor.close()
        self.conn.close()

    def execute_sql(self, sql):
        self.cursor.execute(sql)
        # all_name=self.cursor.fetchall()
        json_data = []
        for temp in self.cursor.fetchall():
            # print(temp[0])
            json_data.append(temp[0])
        return json_data

    def execute_sql_all(self, sql):
        self.cursor.execute(sql)
        # all_name=self.cursor.fetchall()
        json_data = []
        for temp in self.cursor.fetchall():
            # print(temp[0])
            json_data.append(temp)
        return json_data

    def show_all_items(self):
        sql = "select * from test;"
        a=self.execute_sql_all(sql)
        return a

    def show_cates(self):
        sql = "select name from test;"
        a=self.execute_sql(sql)
        return a


    def add_brands(self,name,device_time):
        sql = 'insert into test(name,timestamp) values(%s,%s)'
        # *****************************************************************#
        self.cursor.execute(sql, ([name,device_time]))
        self.conn.commit()
        print('***********************************************************{}成功写入数据库'.format(name))
        return True

    def get_information(self,timestamp):
        if '{}'.format(timestamp) not in self.show_cates():
            return False
        else:
            self.cursor.execute("select * from test where timestamp ='%s'" % timestamp)
            return self.cursor.fetchone()

    def del_infor(self,del_num):
        sql_delete = "delete from test where id=%s" % del_num
        self.execute_sql(sql_delete)
        self.conn.commit()
        return 'success'

    @staticmethod    #实例方法  不需要self
    def print_menu():

        print("********************************************************")
        print("*              欢迎来到监控人员系统                  *")
        print("*1.查看所有录入信息                      2.所有的成员名字  *")
        print("*3.添加成员信息                         4.删除成员信息    *")
        print("*5.获取指定时间信息                      6.退出系统       *")
        print("********************************************************")
        num = input("请输入对应功能序号:")

        return num

    def run(self):
        while True:
            num = self.print_menu()
            if num == "1":
                result = self.show_all_items()
                print(result)

            elif num == "2":
                result = self.show_cates()
                print(result)

            elif num == "3":
                # name = input("请输入你的名字:")
                # list_inf = list(map(int, input('请输入一串数字作为数组:').split()))  # 一行输入多个数字,空格隔开,存入数组a中
                name = '赵zyy'
                timestamp='2021_12_28_10_03'
                result = self.add_brands(name,timestamp)

            elif num == "4":
                del_num = input("请输入您要删除学生的序号:")
                result = self.del_infor(del_num)
                print("删除成功!{}".format(result))

            elif num == "5":
                timestamp = input("请输入你想要查询的时间:")
                self.get_information(timestamp)

            elif num == "6":
                exit()

            else:
                print("输入有误,请重新输入!")

# 面向对象的优点:能封装的尽量封装,调用者很简单,嵌套调方法也很容易,这些基本的方法放进一个基类中,通过类的继承,可以重新写一些新的方法。
def main():
    #创建一个京东商城对象
    jd = JD()
    #调用这个对象的run方法
    jd.run()

if __name__ == "__main__":
    main()
目录
相关文章
|
2天前
|
编解码 Java 程序员
写代码还有专业的编程显示器?
写代码已经十个年头了, 一直都是习惯直接用一台Mac电脑写代码 偶尔接一个显示器, 但是可能因为公司配的显示器不怎么样, 还要接转接头 搞得桌面杂乱无章,分辨率也低,感觉屏幕还是Mac自带的看着舒服
|
4天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1540 5
|
1月前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
7天前
|
人工智能 Rust Java
10月更文挑战赛火热启动,坚持热爱坚持创作!
开发者社区10月更文挑战,寻找热爱技术内容创作的你,欢迎来创作!
581 22
|
4天前
|
存储 SQL 关系型数据库
彻底搞懂InnoDB的MVCC多版本并发控制
本文详细介绍了InnoDB存储引擎中的两种并发控制方法:MVCC(多版本并发控制)和LBCC(基于锁的并发控制)。MVCC通过记录版本信息和使用快照读取机制,实现了高并发下的读写操作,而LBCC则通过加锁机制控制并发访问。文章深入探讨了MVCC的工作原理,包括插入、删除、修改流程及查询过程中的快照读取机制。通过多个案例演示了不同隔离级别下MVCC的具体表现,并解释了事务ID的分配和管理方式。最后,对比了四种隔离级别的性能特点,帮助读者理解如何根据具体需求选择合适的隔离级别以优化数据库性能。
201 3
|
10天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
11天前
|
Linux 虚拟化 开发者
一键将CentOs的yum源更换为国内阿里yum源
一键将CentOs的yum源更换为国内阿里yum源
580 5
|
23天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
7天前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
233 3
|
9天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
327 2