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.xdnf.cn/news/146452.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

java - 七大比较排序 - 详解

前言 本篇介绍了七大比较排序,直接插入排序,希尔排序,冒泡排序,堆排序,选择排序,快速排序,归并排序,一些简单思想代码实现,如有错误,请在评论区指正&#xf…

竞赛选题 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据疫…

十个有用的 Vue.js 自定义 Hook

Vue.js 是我使用的第一个 JavaScript 框架。 我可以说 Vue.js 是我进入 JavaScript 世界的第一扇门之一。 目前,Vue.js 仍然是一个很棒的框架。 我认为有了组合 API,Vue.js 只会增长得更多。 在本文中,我将向分享 10 个可以使用 Vue.js 制作…

2023年中国火化设备行业现状分析:随着城市化进程的推进,市场需求将持续增长[图]

火化设备行业是指生产和提供用于尸体火化处理的设备和相关服务的行业。火化设备主要用于将尸体进行高温焚烧,将尸体转化为骨灰,以达到尸体处理和殡葬的目的。 火化设备行业优点 资料来源:共研产业咨询(共研网) 我国火…

【农业生产模拟】WOFOST模型与PCSE模型实践

查看原文>>>【农业生产模拟】WOFOST模型与PCSE模型实践 WOFOST(WorldFoodStudies)和PCSE(PythonCropSimulationEnvironment)是两个用于农业生产模拟的模型:WOFOST是一个经过多年开发和验证的模型&#xff0c…

【随笔记】C++ condition_variable 陷阱

问题说明 通过 std::condition_variable 来实现超时等待,会受到系统时间变化的影响,系统时间倒退修改就会导致延后唤醒,系统时间提前将会导致提前被唤醒,返回结果仍为超时。 这种问题只有在系统时间发生变化的时候才会出现&…

LeNet网络复现

文章目录 1. LeNet历史背景1.1 早期神经网络的挑战1.2 LeNet的诞生背景 2. LeNet详细结构2.1 总览2.2 卷积层与其特点2.3 子采样层(池化层)2.4 全连接层2.5 输出层及激活函数 3. LeNet实战复现3.1 模型搭建model.py3.2 训练模型train.py3.3 测试模型test…

借助Log360实现综合可见性的增强网络安全

当今的企业对技术的依赖程度前所未有,因此强大的威胁检测和响应策略变得至关重要。在现代世界中,网络犯罪分子不断寻找新的、富有创意的方式,以侵入组织的网络并窃取敏感数据。综合性的可见性是一个关键要素,有时被忽视&#xff0…

Unity HDRP Custom Pass 实现场景雪地效果

先使用Shader Graph连一个使用模型法线添加雪地的shader,并赋给一个material。 1.1 先拿到模型世界坐标下的顶点法线,简单处理一下,赋给透明度即可。 给场景添加Custom Pass,剔除不需要的层级。 1.在Hierarchy界面中&#xff…

Wi-Fi直连分享:Android设备间的高速连接

Wi-Fi直连分享:Android设备间的高速连接 引言 随着无线局域网(Wi-Fi)的普及和发展,使用Wi-Fi直连技术(P2P)在没有中间接入点的情况下实现设备间直接互联成为可能。通过Wi-Fi直连,具备相应硬件…

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

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

【Java 进阶篇】JDBC插入数据详解

在Java应用程序中,与数据库交互是一项常见的任务。其中,插入数据操作是一种基本的数据库操作之一。本文将详细介绍如何使用Java JDBC(Java Database Connectivity)来执行插入数据操作。无论您是初学者还是有一定经验的开发人员&am…

CSS详细基础(六)边框样式

本期是CSS基础的最后一篇~ 目录 一.border属性 二.边框属性复合写法 三.CSS修改表格标签 四.内边距属性 五.外边距属性 六.其他杂例 1.盒子元素水平居中 2.清除网页内外元素边距 3.外边距的合并与塌陷 4.padding不会撑大盒子的情况 七.综合案例——新浪导航栏仿真 …

Android studio升级Giraffe | 2022.3.1 Patch 1踩坑

这里写自定义目录标题 not "opens java.io" to unnamed module错误报错信息解决 superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner报错报错信息解决 Android studio升级Giraffe | 2022.3.1 Patch 1后,出现项目…

imgui开发笔记<1>、ubuntu环境下快速应用

去这个链接下载imgui源码(在此之前需要安装opengl glfw3等等): sudo apt-get install libglfw3-dev https://github.com/ocornut/imgui 我这里源码下载到/home/temp/imgui目录下,咱们不需要编译源码成库,而是直接将下…

【Axure高保真原型】3D圆柱图_中继器版

今天和大家分享3D圆柱图_中继器版的原型模板,图表在中继器表格里填写具体的数据,调整坐标系后,就可以根据表格数据自动生成对应高度的圆柱图,鼠标移入时,可以查看对应圆柱体的数据……具体效果可以打开下方原型地址体验…

网络安全渗透测试工具之skipfish

网络安全渗透测试工具skipfish介绍 在数字化的时代,Web 应用程序安全成为了首要任务。想象一下,您是一位勇敢的安全冒险家,迎接着那些隐藏在 Web 应用程序中的未知风险。而在这个冒险之旅中,您需要一款强大的工具来帮助您发现漏洞,揭示弱点。而这个工具就是 Skipfish。 …

LeetCode 周赛上分之旅 #48 一道简单的树上动态规划问题

⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…

点击、拖拉拽,BI系统让业务掌握数据分析主动权

在今天的商业环境中,数据分析已经成为企业获取竞争优势的关键因素之一。然而,许多企业在面对复杂的数据分析工具时,却常常感到困扰。这些工具往往需要专业的技术人员操作,而且界面复杂,难以理解和使用。对业务人员来说…