Python 笔记07(Mysql数据库基本操作)

一 数据插入

1.1 创建数据列

1.1.1 选择数据库

USE test_data;

1.1.2 插入数据列

ALTER TABLE test_data_info
ADD COLUMN stuno INT,
ADD COLUMN stuname VARCHAR(255),
ADD COLUMN gender VARCHAR(10);

1.2 插入具体数据

import MySQLdb# 创建数据库连接  # 主机IP:192.168.146.1,本机可以使用local_host
conn = MySQLdb.connect(host='127.0.0.1', port=3306, user='root', password='root', db='test_data')
# print('conn:', conn)# 获取游标对象
cursor = conn.cursor()   # cursor 游标sql = 'insert into test_data_info(stuno, stuname, gender) values(%s,%s,%s)'try:result = cursor.execute(sql, args=(1042, 'rose', 'girl'))   # 增,删,改,需要提交  # execute,执行print('result:', result)conn.commit()    # 提交  # commit
except Exception as ex:print(ex)conn.rollback()  # 记得回滚

1.3 查询数据

1.3.1 查询多条数据

sql = 'select * from test_data_info'cursor.execute(sql)
result = cursor.fetchall()
print('result:', result)

1.3.2 查询单条数据

sql = 'select count(*) from test_data_info'cursor.execute(sql)
result = cursor.fetchone()
print('result:', result)

1.4 命令行操作

1.4.1 命令行操作

Windows + r   -> cmd

1.4.2 登录MySQL

mysql -h127.0.0.1 -uroot -proot

1.4.3 选择数据库

use test_data

1.4.4 查看存在的表格

show tables;

1.4.5 查看具体表格

select * from test_data_info;

1.4.6 插入数据

insert into test_data_info(stuno, stuname, gender) values (1043, 'mark', 'boy');

二 数据库内容修改

2.1 配置文件一

class DBConfig:db_host = '127.0.0.1'db_port = 3306db_user = 'root'db_password = 'root'db_database = 'test_data'

2.2 配置文件二

import MySQLdb
class MySQLClientUtils(object):def __init__(self, config):self.host = config.db_hostself.port = config.db_portself.user = config.db_userself.pwd = config.db_passwordself.db = config.db_databaseself.conn = Noneself.cursor = None# 创建链接def create_connection(self):self.conn = MySQLdb.connect(host=self.host, port=self.port, user=self.user, password=self.pwd, db=self.db)# 获取游标对象def create_cursor(self):self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)# 关闭def close(self):if self.cursor:self.cursor.close()if self.conn:self.conn.close()# 关于数据库的操作, 增删改查, insert, delete, update,def dml_operation(self, sql, args=None):try:# 获取连接对象self.create_connection()# 获取游标self.create_cursor()# 执行sql语句result = self.cursor.execute(sql, args=args)   # 执行sql语句并传参# 提交self.conn.commit()return resultexcept Exception as ex:print('ex: ', ex)self.conn.rollback()finally:self.close()   # 正常结束,调用关闭操作# 查询操作def search_operation(self, sql, args=None, is_one=True):try:# 创建链接self.create_connection()# 获取cursorself.create_cursor()# 执行sql语句self.cursor.execute(sql, args=args)if is_one:result = self.cursor.fetchone()  # 查询一个结果else:result = self.cursor.fetchall()  #return result  # 返回查询结果except Exception as ex:print('ex: ', ex)finally:self.close()  # 关闭

2.3 插入数据

2.3.1 插入数据

sql1 = 'insert into test_data_info(stuno, stuname, gender) values(%s,%s,%s)'# 创建对象
client_utils = MySQLClientUtils(DBConfig)
result = client_utils.dml_operation(sql1, args=(1048, '张三', 'boy'))
print(result)

2.3.2 修改数据

from settings import DBConfig
from mysql_utils import MySQLClientUtilssql2 = 'update test_data_info set stuname=%s where stuno=%s'
# 创建对象
client_utils = MySQLClientUtils(DBConfig)
result = client_utils.dml_operation(sql2, args=('张小亮', 1048))
print(result)

2.3.3 修改数据

sql3 = 'delete from test_data_info where stuno=%s'# 创建对象
client_utils = MySQLClientUtils(DBConfig)
result = client_utils.dml_operation(sql3, args=(1048, ))
print(result)

2.3.4 查询数据

sql4 = 'select count(*) from test_data_info'# 创建对象
client_utils = MySQLClientUtils(DBConfig)
result = client_utils.search_operation(sql4)
print(result)

2.3.5 模糊查询

sql5 = 'select * from test_data_info where stuname like %s'# 创建对象
client_utils = MySQLClientUtils(DBConfig)
result = client_utils.search_operation(sql5, args=('%ma%', ), is_one=False)
print(result)

三 实际项目数据库操作

3.1 进入主界面

from settings import DBConfig
from mysql_utils import MySQLClientUtils
import prettytable as pt# 面向过程
def menu():while True:print('-' * 50, '欢迎来到购物商城', '-' * 50)print('1.查询全部商品 2.根据商品名称查询 3.根据编号查询 4.新增商品进购物车 5.清空购物车 6.删除购物车中指定商品 ''7.查询购物车 0.退出系统')print('-'*120)choice = eval(input('请选择:'))if choice == 1:# 调用查询方法result = search_all()show(result)elif choice == 2:goods_name = input('请输入要查询的商品名称【支持模糊查询】:')# 调用本模块中根据商品名称查询的方法result = search_by_name(goods_name)show(result)elif choice == 3:goods_id = eval(input('请输入要查询的商品编号:'))# 调用本模块中根据商品名称查询的方法result = search_by_id(goods_id)show(result)elif choice == 4:goods_id = eval(input('请输入想要购买的商品编号: '))result = search_by_id(goods_id)[0]print('result:', result)# result: ({'id': '51.0', 'name': '项目驱动零起点学Java 百万程序员Java学习经验总结', 'price': '49.0'},)goods_name = result.get('name')price = result.get('price')num = eval(input('请输入要购买的数量:'))# 调用本模块的添加进购物车的方法insert_result = add_cart(goods_id, goods_name, price, num)if insert_result > 0:print('商品已经添加到购物车!')else:print('添加失败')elif choice == 5:# 清空购物车result = clear_cart()if result > 0:print('成功清空购物车')else:print('购物车中无商品!')elif choice == 6:"""6.删除购物车中指定商品"""goods_id = eval(input('请输入要删除的商品编号: '))result = delete_goods_in_cart(goods_id)print('result:', result)if result > 0:print('删除购物车商品成功')else:print('购物车中无商品')elif choice == 7:"""7.查询购物车"""result = search_cart()show_cart(result)elif choice == 0:print('谢谢使用 !')breakelse:print('输入错误,重新选择')if __name__ == '__main__':menu()

3.2  查询全部商品

sql = 'select * from yanxuan'

def search_all():"""查询全部商品"""sql = 'select * from yanxuan'# 调用数据库查询result = MySQLClientUtils(config=DBConfig).search_operation(sql, is_one=False)return resultdef show(result):"""数据显示"""tb = pt.PrettyTable()tb.field_names = ['编号', '商品名称', '售价']for item in result:id = item.get('id')name = item.get('name')price = item.get('price')lst = [id, name, price]tb.add_row(lst)  # 添加到表格中print('tb:', tb)

3.3 根据商品名称查询

sql = 'select * from yanxuan where name like %s'

def search_by_name(goods_name):sql = 'select * from yanxuan where name like %s'# 调用数据库查询result = MySQLClientUtils(config=DBConfig).search_operation(sql, args=(f'%{goods_name}%',), is_one=False)return result

3.4 根据编号查询

sql = 'select * from yanxuan where id = %s'

def search_by_id(goods_id):sql = 'select * from yanxuan where id = %s'# 调用数据库查询result = MySQLClientUtils(config=DBConfig).search_operation(sql, args=(goods_id,), is_one=False)return result

sql = 'insert into cart (goods_id, name, price, num) value (%s, %s, %s, %s)'

def add_cart(id, goods_name, price, num):sql = 'insert into cart (goods_id, name, price, num) value (%s, %s, %s, %s)'result = MySQLClientUtils(config=DBConfig).dml_operation(sql, args=(id, goods_name, price, num))return result

3.5 清空购物车

sql = 'delete from cart'

def clear_cart():"""清空购物车"""sql = 'delete from cart'result = MySQLClientUtils(config=DBConfig).dml_operation(sql)return result

3.6 删除购物车指定商品

sql = 'delete from cart where goods_id=%s'

def delete_goods_in_cart(goods_id):"""删除购物车指定商品"""sql = 'delete from cart where goods_id=%s'result = MySQLClientUtils(config=DBConfig).dml_operation(sql, args=(goods_id, ))return result

3.7 查询购物车所有商品

sql = 'select * from cart'

def search_cart():"""查询购物车所有商品"""sql = 'select * from cart'result = MySQLClientUtils(config=DBConfig).search_operation(sql, is_one=False)return result

显示购物车商品

def show_cart(result):tb = pt.PrettyTable()tb.field_names = ['序号', '商品编号', '商品名称', '售价', '数量']for item in result:id = item.get('id')goods_id = item.get('goods_id')name = item.get('name')price = item.get('price')num = item.get('num')lst = [id, goods_id, name, price, num]tb.add_row(lst)print(tb)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

番外5:下载+安装+配置Linux

任务前期工作: 01. 电脑已安装好VMware Workstation软件; 02.提前下载好Rhel-8.iso映像文件(文件较大一般在9.4GB,建议采用迅雷下载),本人使用的以下版本(地址ed2k://|file|rhel-8.4-x86_64-dvd…

基于PHP+MySQL的养老院管理系统

摘要 随着21世纪互联网时代的兴起,我们见证了人们生活方式的巨大改变。这个时代不仅深刻影响了我们的生活,还改变了我们对信息科学的看法。社会的各个领域都在不断发展,人们的思维也在不断进步,与此同时,信息的需求也与…

rust智能指针

一、智能指针是什么 指针是一个存储内存地址的变量。这个地址指向一些其他数据。 智能指针是一类数据结构&#xff0c;它们类似指针&#xff0c;但是拥有额外的功能。智能指针的概念起源于C。Rust标准库提供了许多智能指针&#xff0c;比如String和Vec<T>&#xff0c;虽…

【React】React组件生命周期以及触发顺序(部分与vue做比较)

最近在学习React&#xff0c;发现其中的生命周期跟Vue有一些共同点&#xff0c;但也有比较明显的区别&#xff0c;并且执行顺序也值得讨论一下&#xff0c;于是总结了一些资料在这里&#xff0c;作为学习记录。 v17.0.1后生命周期图片 初始化阶段 由ReactDOM.render()触发 —…

百度交易中台之内容分润结算系统架构浅析

作者 | 交易中台团队 导读 随着公司内容生态的蓬勃发展&#xff0c;内容产出方和流量提供方最关注的“收益结算”的工作&#xff0c;也就成为重中之重。本文基于内容分润结算业务为入口&#xff0c;介绍了实现过程中的重难点&#xff0c;比如千万级和百万级数据量下的技术选型和…

用Java打印长方形、平行四边形 、三角形、菱形、空心菱形

今天复习使用嵌套for来完成一些任务&#xff0c;于是想着打印一些图形来练习 思考感悟 长方形 行数 和 每行的星星数嵌套遍历即可 平行四边形 核心&#xff1a;每行空格数总行数-行数 行数空格数132231 三角形 核心&#xff1a;每行星星数2*当前行数-1 行数星星数1123…

【VIM】VIm-plug插件

如何查找需要的插件 https://github.com/mhinz/vim-startify https://github.com/vim-airline/vim-airline https://github.com/Yggdroot/indentLine github.com/w0ng/vim-hybrid github.com/altercationi/vim-colors-solarized guithub.com/morhetz/gruvbox github.com/sc…

kotlin aes 加密解密

文章目录 1. key填充2. 加密3. 解密 1. key填充 aes算法对key的字节数有要求 所以对输入的key要做填充处理 fun fillKey(key: String): ByteArray {val random SecureRandom.getInstance("SHA1PRNG")random.setSeed(key.toByteArray())val generator KeyGenerato…

【2023保研】双非上岸东南网安

个人情况 学校&#xff1a;henu 专业&#xff1a;信息安全 排名&#xff1a;1/66 英语&#xff1a;六级500 竞赛&#xff1a;蓝桥杯PB国一&#xff0c;ISCC国一&#xff0c;密码数学挑战赛国三&#xff0c;还有其他一些省级水奖 论文&#xff1a;一篇EI在投&#xff08;三作通…

C++:红黑树

目录 一、关于红黑树 1、红黑树和AVL树区别 2、红黑树规则 二、红黑树 1、红黑树变色举例 2、红黑树具体情况分析 ①、情况一&#xff1a;只变色 ②、情况二&#xff1a;单旋 变色 ③、情况三&#xff1a;双旋 变色 三、红黑树的模拟实现 一、关于红黑树 1、红黑树…

王道考研计算机网络——传输层

一、传输层概述 复用&#xff1a;发送方不同的应用进程都可以使用同一个传输层的协议来传送数据 分用&#xff1a;接收方的传输层在去除报文段的首部之后能把数据交给正确的应用进程 熟知端口号就是知名端口号0-1023 客户端使用的端口号是动态变化的&#xff0c;不是唯一确定…

某房产网站登录RSA加密分析

文章目录 1. 写在前面2. 抓包分析3. 扣加密代码4. 还原加密 1. 写在前面 今天是国庆节&#xff0c;首先祝福看到这篇文章的每一个人节日快乐&#xff01;假期会老的这些天一直在忙事情跟日常带娃&#xff0c;抽不出一点时间来写东西。夜深了、娃也睡了。最近湖南开始降温了&…

Unity Urp无线延申的网格效果

无线延申的网格 该项目必须是再Urp项目 shader代码实现 Shader "Unlit/infTutorial1" {Properties{_Alpha ("Alpha", Range(0, 0.5)) 0.5}SubShader{Tags{"RenderPipeline""UniversalRenderPipeline""RenderType""…

Pikachu靶场——PHP反序列化漏洞

文章目录 1. PHP反序列化1.1 反序列化代码审计1.2 漏洞防御 1. PHP反序列化 可参考我写的另一篇博客&#xff1a;反序列化漏洞及漏洞复现。 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串&#xff0c;比如下面是一个对象&#xff1a; class S{publi…

【MySQL】初识数据库

目录 ♫什么是数据库 ♫数据库的分类 ♪关系型数据库 ♪非关系型数据库 ♫显示已有的数据库 ♫创建数据库 ♫删除数据库 ♫使用数据库 ♫数据类型 ♪数值类型 ♪字符串类型 ♪日期类型 ♫创建表 ♫查看表 ♪查看当前数据库下所以表&#xff1a; ♪查看指定表结构&#x…

java多线程相关介绍

1. 线程的创建和启动 在 Java 中创建线程有两种方式。一种是继承 Thread 类并重写其中的 run() 方法&#xff0c;另一种是实现 Runnable 接口并重写其中的 run() 方法。创建完线程对象后&#xff0c;调用 start() 方法可以启动线程。 2. 线程的状态 Java 的线程在不同阶段会处于…

SimpleCG动画示例--汉诺塔动画演示

前言 SimpleCG的使用方法在前面已经介绍了许多&#xff0c;有兴趣的同学如果有去动手&#xff0c;制作一些简单动画应该没多大问题的。所以这次我们来演示一下简单动画。我们刚学习C语言的递归函数时&#xff0c;有一个经典例子相信很多同学都写过&#xff0c;那就是汉诺塔。那…

hadoop生态现状、介绍、部署

一、引出hadoop 1、hadoop的高薪现状 各招聘平台都有许多hadoop高薪职位&#xff0c;可以看看职位所需求的技能 ----> hadoop是什么&#xff0c;为什么会这么高薪&#xff1f;引出大数据&#xff0c;大数据时代&#xff0c;大数据与云计算 2、大数据时代的介绍 大数据的故事…

buuctf-[WUSTCTF2020]CV Maker

打开环境 随便登录注册一下 进入到了profile.php 其他没有什么页面&#xff0c;只能更换头像上传文件&#xff0c;所以猜测是文件上传漏洞 上传一句话木马看看 <?php eval($_POST[a]);?>回显 搜索一下 添加文件头GIF89a。上传php文件 查看页面源代码&#xff0c;看…

【分布式云储存】Springboot微服务接入MinIO实现文件服务

文章目录 前言技术回顾准备工作申请accessKey\secretKey创建数据存储桶公共资源直接访问测试 接入springboot实现文件服务依赖引入配置文件MinIO配置MinIO工具类 OkHttpSSLSocketClient兼容ssl静态资源预览解决方案资源上传预览测试测试结果 前言 上篇博客我们介绍了分布式云存…