Python操作MySQL基础使用
Python操作MySQL基础使用
链接数据库并查询数据
import pymysql# 链接数据库
conn = pymysql.connect(host='10.5.6.250',port=3306,user='root',password='********'
)# 查看MySQL版本信息
print(conn.get_server_info()) # 5.5.27# 获取到游标对象
cursor = conn.cursor()# 选择数据库
conn.select_db("hanligang_data")# 使用游标对象执行sql语句
sql = "select * from tstudent"
cursor.execute(sql)# 获取查询结果
results: tuple = cursor.fetchall()
print(results) # 结果是一个大元组,里面包含了每一行数据的小元组for r in results:print(r)conn.close() # 关闭
查询结果(里面身份证为for循环生产的虚拟数据):
('0000000118', '魏欣若', '男', '6968390833530048', '1984-09-19 00:00:00.000', 'weixinruo@91xueit.com', '开发', '2019-12-18 17:58:52.85')
('0000000119', '胡辉香', '男', '1687819817472568', '1985-02-18 00:00:00.000', 'huhuixiang@91xueit.com', '开发', '2019-12-18 17:58:52.85')
('0000000120', '姜利维', '男', '1367699597056572', '1988-10-17 00:00:00.000', 'jiangliwei@91xueit.com', '网络', '2019-12-18 17:58:52.85')
('0000000121', '马文霞', '男', '2921194355462422', '1984-03-11 00:00:00.000', 'mawenxia@91xueit.com', '测试', '2019-12-18 17:58:52.85')
('0000000122', '于爽轮', '女', '3826182221042389', '1981-03-27 00:00:00.000', 'yushuanglun@91xueit.com', '网络', '2019-12-18 17:58:52.85')
('0000000123', '吴军雪', '女', '361896711952425', '1988-10-05 00:00:00.000', 'wujunxue@91xueit.com', '开发', '2019-12-18 17:58:52.85')
('0000000124', '廖菲以', '男', '6206075708967862', '1984-10-07 00:00:00.000', 'liaofeiyi@91xueit.com', '开发', '2019-12-18 17:58:52.85')
('0000000125', '孔国馨', '男', '6196758315299228', '1984-04-07 00:00:00.000', 'kongguoxin@91xueit.com', '开发', '2019-12-18 17:58:52.85')
('0000000126', '李伟伟', '女', '9973233711794250', '1988-08-05 00:00:00.000', 'liweiwei@91xueit.com', '开发', '2019-12-18 17:58:52.85')
修改库或者表
import pymysqldb = pymysql.connect(
host='localhost', user='root', password='mysql', #连接到数据库需要指定的最少信息db = 'demo', database='demo', #指定选择的数据库,任选一个都可,前面是简写passwd='mysql', #密码也可以用passwd简写形式autocommit=True, #设置修改自动提交到数据库auth_plugin_map='mysql_native_password') #设置身份认证,8.0版本之后建议加上
cursor = db.cursor() #创建一个指针,之后基本所有的操作都是使用指针来实现
cursor.execute('show databases;') #执行SQL语句
db.commit() #将修改提交到数据库——如果连接时参数autocommit设置为false要加上
cursor.fetchall() #获取上一条SQL语句的执行结果,如查询结果等
cursor.fetchone() #获取执行结果的一行
db.close() #关闭数据库
常用方法
为了让程序更加健壮,我们一般不会链接数据库这样调用该函数,先不说麻烦与否,如果我们经常要修改连接参数,那么我们所有调用地方都会修改,这样的代码十分不健壮。所以我们应该使用模块化进行解决,代码如下:
import pymysqldef connect_mysql():db_config = {'host':'127.0.0.1','port':3306,'user':'ian','password':'ian123','charset':'utf8'}conn = pymysql.connect(**db_config)return conn
查询函数
def query_students_fetchone():sql = 'SELECT * FROM students'rows = cursor.execute(sql)print('There are %d students' % rows)for i in range(rows):student = cursor.fetchone()print(student)
增删数据库
增删改,操作方式都一样,只是mysql语句的不同,返回的值是影响的行数。需要注意的是,我们需要提交事务,如果不提交事务,语句是不执行的,只是显示执行成功,但是表中并没有进行相关操作。代码如下:
import pymysqldef insert_mysql():no = int(input('编号: '))name = input('名称: ')location = input('所在地: ')# 1. 创建连接conn = pymysql.connect(host='127.0.0.1', port=3306,user='ian', password='ian123',database='test', charset='utf8')try:# 2. 获取游标对象with conn.cursor() as cursor:# 3. 通过游标对象向数据库服务器发出SQL语句affected_rows = cursor.execute('insert into `tb_test` values (%s, %s, %s)',(no, name, location))if affected_rows == 1:print('新增成功!!!')# 4. 提交事务conn.commit()except pymysql.MySQLError as err:# 4. 回滚事务conn.rollback()print(type(err), err)finally:# 5. 关闭连接释放资源conn.close()def del_mysql():no = int(input('编号: '))# 1. 创建连接conn = pymysql.connect(host='127.0.0.1', port=3306,user='ian', password='ian123',database='test', charset='utf8',autocommit=True)try:# 2. 获取游标对象with conn.cursor() as cursor:# 3. 通过游标对象向数据库服务器发出SQL语句affected_rows = cursor.execute('delete from `tb_dept` where `dno`=%s',(no, ))if affected_rows == 1:print('删除成功!!!')finally:# 5. 关闭连接释放资源conn.close()insert_mysql()
del_mysql()
封装mysql类
import pymysql
from pathlib import Pathclass ConnectMsql:def __init__(self, host='127.0.0.1', port=3306, user='ian',password='ian123', database="test", filename: str = "test.sql"):""":param host: 域名:param port: 端口:param user: 用户名:param password: 密码:param database: 数据库名:param filename: 文件名称"""self._host: str = hostself._port: int = portself._user: str = userself._password: str = passwordself._database: str = databaseself._file_path = Path(__file__).parent.joinpath(filename)def _show_databases_and_create(self):"""查询数据库是否存在,不存在则进行新建操作:return:"""connection = pymysql.connect(host=self._host, port=self._port, user=self._user, password=self._password,cursorclass=pymysql.cursors.DictCursor)with connection:with connection.cursor() as cursor:cursor.execute('show databases;')result = cursor.fetchall()results = self._database not in tuple(x["Database"] for x in result)if results:with connection.cursor() as cursor:cursor.execute(f'create database {self._database};')with connection.cursor() as cursor:cursor.execute('show databases;')result = cursor.fetchall()results = self._database in tuple(x["Database"] for x in result)return results if results else resultelse:return Truedef _export_databases_data(self):"""读取.sql文件,解析处理后,执行sql语句:return:"""if self._show_databases_and_create() is True:connection = pymysql.connect(host=self._host, port=self._port, user=self._user, password=self._password,database=self._database, charset='utf8')# 读取sql文件,并提取出sql语句results, results_list = "", []with open(self._file_path, mode="r+", encoding="utf-8") as r:for sql in r.readlines():# 去除数据中的“\n”和“\r”字符sql = sql.replace("\n", "").replace("\r", "")# 获取不是“--”开头且不是“--”结束的数据if not sql.startswith("--") and not sql.endswith("--"):# 获取不是“--”的数据if not sql.startswith("--"):results = results + sql# 根据“;”分割数据,处理后插入列表中for i in results.split(";"):if i.startswith("/*"):results_list.append(i.split("*/")[1] + ";")else:results_list.append(i + ";")# 执行sql语句with connection:with connection.cursor() as cursor:# 循环获取sql语句for x in results_list[:-1]:# 执行sql语句cursor.execute(x)# 提交事务connection.commit()else:return "sql全部语句执行成功 !"@propertydef sql_run(self):"""执行方法:return:"""return self._export_databases_data()if __name__ == '__main__':res = ConnectMsql().sql_runprint(res)
相关文章:
Python操作MySQL基础使用
Python操作MySQL基础使用 链接数据库并查询数据 import pymysql# 链接数据库 conn pymysql.connect(host10.5.6.250,port3306,userroot,password******** )# 查看MySQL版本信息 print(conn.get_server_info()) # 5.5.27# 获取到游标对象 cursor conn.cursor()# 选择数据库…...
【pytorch】pytorch中的高级索引
这里只介绍pytorch的高级索引,是一些奇怪的切片索引 基本版 a[[0, 2], [1, 2]] 等价 a[0, 1] 和 a[2, 2],相当于索引张量的第一行的第二列和第三行的第三列元素; a[[1, 0, 2], [0]] 等价 a[1, 0] 和 a[0, 0] 和 a[2, 0],相当于索…...
基于图像识别的自动驾驶汽车障碍物检测与避障算法研究
基于图像识别的自动驾驶汽车障碍物检测与避障算法研究是一个涉及计算机视觉、机器学习、人工智能和自动控制等多个领域的复杂问题。以下是对这个问题的研究内容和方向的一些概述。 障碍物检测 障碍物检测是自动驾驶汽车避障算法的核心部分,它需要从车辆的感知数据…...
Spring boot定时任务
目录 前言一、使用 Scheduled 注解二、使用 ScheduledExecutorService三、使用 Spring 的 TaskScheduler四、使用第三方调度框架 前言 在 Spring Boot 中,有多种方法来编写定时任务,以执行周期性或延迟执行的任务。下面是几种常见的方式 一、使用 Sche…...
Glide原理
本文基于Carson整理 1.简介 相比其他几种图片加载框架,Glide性能最好。这得益于其高效的图片缓存策略 其还有多样化的媒体格式加载:如GIF、Video,对于商城首页需展示丰富样式、信息的页面需求来说,也是必不可少的。 2.加载原理…...
wps表格按分隔符拆分单元格
有数据如下;看选中区域,一个单元格中有一个v,空格,然后有三个数值,以空格分开;点击菜单中的数据-分列; 弹出分列向导;选择 分隔符号; 选择分隔符为空格;出现预…...
【SEC 学习】Vim 的基本使用
一、Vim 编辑器安装 yum install -y vim二、Vim 三种模式 命令模式 编辑模式 末行模式 三、三种模式之间的转换 1. 命令模式 -> 编辑模式 快捷键含义i从光标处插入I从光标所在行首插入a从光标后插入A从光标所在行末插入o从光标下一行插入O从光标上一行插入 2. 命令模式 …...
Linux中shell脚本练习
目录 1.猜数字 2.批量创建用户 3.监控网卡Receive Transmit 数据的变化 4.部署Linux 5.系统性能检测脚本 6.分区脚本 7.数据库脚本 1.猜数字 随机数的生成 使用环境变量RANDOM,范围是0~32767 编写guest.sh,实现以下功能࿱…...
AS/400简介
AS400 AS400 简介AS/400操作系统演示 AS400 简介 在 AS400 中,AS代表“应用系统”。它是多用户、多任务和非常安全的系统,因此用于需要同时存储和处理敏感数据的行业。它最适合中级行业,因此用于制药行业、银行、商场、医院管理、制造业、分销…...
FreeRTOS 中断管理介绍和实操
目录 中断定义 中断优先级 相关注意 中断相关函数 1.队列 2.信号量 3.事件标志组 4.任务通知 5.软件定时器 中断管理实操 中断定义 中断是指在程序执行的过程中,突然发生了某种事件,需要立即停止当前正在执行的程序,并转而处理这个…...
性能测试 —— Jmeter 常用三种定时器!
1、同步定时器 位置:HTTP请求->定时器->Synchronizing Timer 当需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用户阻塞线程,知道线程数达到预先配置的数值,才开始执行…...
ROS自学笔记十七:Arbotix
ArbotiX 是一个基于 ROS(Robot Operating System)的机器人控制系统,它旨在为小型机器人提供硬件控制和传感器接口,以便于机器人的运动和感知。以下是有关 ROS 中 ArbotiX 的简介和安装步骤: ArbotiX 简介 ArbotiX 主…...
Mac电脑窗口管理Magnet中文 for mac
Magnet是一款Mac窗口管理工具,它可以帮助用户轻松管理打开的窗口,提高多任务处理效率。以下是Magnet的一些主要特点和功能: 分屏模式支持:Magnet支持多种分屏模式,包括左/右/顶部/底部 1/2 分屏、左/中/右 1/3 分屏、…...
Centos7 部署 Stable Diffusion
参考:https://www.jianshu.com/p/ff81bb76158a 遇到的问题: 1、git clone 比较慢 解决办法:设置代理 https://blog.csdn.net/dszgf5717/article/details/130735389 2、pip install 比较慢 解决办法:更换源或设置代理 https:/…...
【Python】一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格
题目要求:一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格 例:(为了方便观看,以 ▢ 代替空格) 输入:123▢▢abc▢▢▢python 输出:123▢abc▢python 参考…...
嵌入式项目电灯
1、原理,电灯有个正负极,当正确接入电源正负极就能点亮(如正极5v,负极0v),单两边同时接入正极,就不会亮(两端都是5v),所以通过控制电平,来实现控制led等的亮暗 cpu通过给…...
[ubuntu系统下的文本编辑器nano,vim,gedit,文件使用,以及版本更新问题]
文本编辑器概要 在Ubuntu系统下,有许多文本编辑器可供选择,每个编辑器都有其独特的特性和用途。以下是一些常见的文本编辑器: Gedit: 这是Ubuntu默认的文本编辑器,它简单易用,适合基本的文本编辑任务。 安…...
C#WinformListView实现缺陷图片浏览器
C#&Winform&ListView实现缺陷图片浏览器 功能需求图像浏览行间距调整悬浮提示 功能需求 机器视觉检测系统中特别是缺陷检测系统,通常需要进行对已经检出的缺陷图片进行浏览查阅。主要是通过条件筛选查询出所需要的数据,进行分页再展示到界面中。…...
C- qsort()
qsort() 是 C 语言标准库中的一个函数,用于进行数组的排序。其名字“qsort”代表“快速排序”(Quick Sort),这是因为它通常使用快速排序算法进行排序,但具体实现可能因库而异。 以下是 qsort() 的详细介绍:…...
【Apache Flink】基于时间和窗口的算子-配置时间特性
文章目录 前言配置时间特性将时间特性设置为事件时间时间戳分配器周期性水位线分配器创建一个实现AssignerWithPeriodicWatermarks接口的类,目的是为了周期性生成watermark 定点水位线分配器示例 参考文档 前言 Apache Flink 它提供了多种类型的时间和窗口概念&…...
WorkshopDL:跨平台工具实现Steam创意工坊资源获取的技术方案
WorkshopDL:跨平台工具实现Steam创意工坊资源获取的技术方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 在多平台游戏生态中,玩家常面临创意内容获取…...
Qwen3-ASR-0.6B真实效果:直播间弹幕语音→实时字幕滚动+敏感词过滤联动
Qwen3-ASR-0.6B真实效果:直播间弹幕语音→实时字幕滚动敏感词过滤联动 1. 开篇:直播间语音转文字的痛点 做直播的朋友都知道,实时字幕是个让人又爱又恨的功能。爱的是它能提升观众体验,让不方便开声音的人也能看懂内容ÿ…...
iPhone上跑Transformer模型?手把手教你用EfficientFormer部署移动端AI应用
iPhone上部署EfficientFormer:移动端Transformer模型实战指南 当苹果在2023年发布会上演示Stable Diffusion在iPhone 15 Pro上实时运行时,整个科技圈都意识到:移动端AI推理的时代已经到来。作为移动开发者,你是否也想过在自己的Ap…...
Wan2.2-T2V-A5B科研工具链:Matlab数据可视化与模型输入预处理
Wan2.2-T2V-A5B科研工具链:Matlab数据可视化与模型输入预处理 1. 引言 做科研的朋友们,你们有没有遇到过这样的场景:手头有一堆宝贵的实验数据,想用Wan2.2-T2V-A5B这样的文生视频模型,把数据背后的科学故事“演”出来…...
OpenClaw自动化测试:Qwen3.5-9B-AWQ-4bit验证UI截图一致性
OpenClaw自动化测试:Qwen3.5-9B-AWQ-4bit验证UI截图一致性 1. 为什么需要自动化UI测试 在个人项目迭代过程中,我发现每次功能更新后手动检查UI一致性非常耗时。上周修改了一个按钮样式后,意外导致移动端布局错位,直到用户反馈才…...
视频智能剪辑的革命:FunClip如何用AI重新定义视频编辑边界
视频智能剪辑的革命:FunClip如何用AI重新定义视频编辑边界 【免费下载链接】FunClip Open-source, accurate and easy-to-use video speech recognition & clipping tool, LLM based AI clipping intergrated. 项目地址: https://gitcode.com/GitHub_Trending…...
Gemma-3 Pixel StudioGPU算力优化:24GB显存管理+4-bit量化避坑指南
Gemma-3 Pixel Studio GPU算力优化:24GB显存管理4-bit量化避坑指南 你是不是也遇到过这种情况?好不容易部署了一个强大的AI模型,比如这个Gemma-3 Pixel Studio,功能确实惊艳——能看懂图片、能聊天、还能写代码。但一运行起来&am…...
一些常见颜色汇总
1 1.1 CVPR2024:Koala序号示例RGBHEX1(244, 204, 204)#F4CCCC2(207, 226, 243)#CFE2F33(252, 229, 205)#FCE5CD序号示例RGBHEX1(217,217,217)#D9D9D92(252,229,205)#FCE5CD 2 2.1 AAAI2025:Stable Mean Teacher for Semi-supervised Video Action Detection序号示例…...
1940-2025年各省市区县乡镇各月100m高空平均风速及风向角计算结果
各省市区县乡镇各月100m 高空平均风速及风向角计算结果1940~2025 各省市区县的平均风速_100m、平均风向角度_100m、平均风向16方位分类_100m: 1940~2025年各乡镇各月100m高空平均风速及风向角计算结果.dta 1940~2025年各城市各月100m高空平均风速及风…...
图神经网络聚类:从范式演进到实战应用全景解析
1. 图神经网络聚类:为什么它正在改变数据科学游戏规则 想象一下你面前有一张巨大的社交网络关系图,每个节点代表一个用户,连线代表好友关系。传统聚类算法可能只能根据连接密度划分社群,但如果同时考虑用户的年龄、兴趣、地理位置…...
