当前位置: 首页 > news >正文

利用python连接MySQL数据库并执行相关sql操作

一、新建MySQL数据库

1.启动MySQL服务

打开phpstudy,开启MySQL服务。如果开启失败的话,可以打开任务管理器,把正在运行的mysqld服务的进程进行关闭,再次打开MySQL服务即可启动。

2.新建MySQL数据库

选择数据库,点击创建数据库,在里面填写你准备创建数据库的名称、用户名和密码,填好后选择确定即可成功创建好一个新的MySQL数据库。

二、提升数据库用户的权限

1.复制root对应用户和密码

在刚才的数据库模块查看一个名为root的数据库,查看对应的用户和密码,如果是第一次使用的话,用户和密码应该也都是root,但密码可以点击右侧的操作进行修改。然后可以先复制粘贴到记事本内,后面的登入需要用到。

2.下载phpMyAdmin

选择软件管理,找到phpMyAdmin,如果没有下载的可以先进行下载。点击管理,打开phpMyAdmin

3.打开并登入phpMyAdmin

这里可以看到我们需要用户名和密码才能登入phpMyAdmin,用户和密码就是刚才查看并复制的,进行输入登入。

4.修改用户权限

选择账户,找到刚才你创建的数据库的用户名,然后点击右侧的修改权限。这里我就拿python用户举例,全局权限在新建数据库后对应的是USAGE,我这里是已经将权限提升过后的,所以才显示的ALL PRIVILEGES,这点不用担心。

全局权限这里的选择全部勾选,然后点击执行即可完成权限的提升。

三、连接MySQL数据库

1.建立MySQL连接

打开Navicat for MySQL,选择文件-->新建连接-->MySQL。

这里输入自己对应数据库的连接名、用户名和密码,输入完毕后可以先点击测试连接试试,没有问题最后点击确定。这样就建立起了和数据库的联系。

双击刚连接到的MySQL数据库,从原本的灰色变为绿色,说明数据库连接成功。找到我们的python库,点击新建表。

2.添加字段并新建表

点击添加字段,可以输入一些你想创建的名,比如说下面的id,name,count,添加完成后点击保存,并输入你想创建的表名。

3.添加数据

双击打开我们刚新建好的表,点击左下侧的小加号,进行数据创建,然后对应输入你自己想要输入的值即可,完成创建后点击小勾,进行保存。

四、执行python代码连接数据库

这里我会进行三套python代码连接MySQL数据库的演示。

1. 第一套python

其中user,password,database需要填写你自己新建数据库对应的数据库用户名,数据库密码,数据库名称。

import mysql.connector  # 导入MySQL连接器模块
from mysql.connector import Error  # 导入MySQL连接错误模块try:# 连接到MySQL数据库connection = mysql.connector.connect(host='localhost',  # 数据库主机地址user='xxx',  # 数据库用户名password='xxx',  # 数据库密码database='xxx'  # 数据库名称)if connection.is_connected():  # 如果连接成功db_Info = connection.get_server_info()  # 获取数据库服务器信息print("成功连接到 MySQL 数据库,服务器版本:", db_Info)  # 打印成功连接信息cursor = connection.cursor()  # 创建游标对象cursor.execute("select database();")  # 执行SQL查询以获取当前数据库record = cursor.fetchone()  # 获取查询结果print("你连接到的数据库是:", record[0])  # 打印连接的数据库名称except Error as e:  # 捕获可能的连接错误print("连接出错:", e)  # 打印连接错误信息finally:if connection.is_connected():  # 如果连接处于打开状态cursor.close()  # 关闭游标connection.close()  # 关闭连接print("MySQL连接已关闭")  # 打印连接已关闭的信息

执行python代码,运行结果如下:

可以很明显的看到输入的内容:

成功连接到 MySQL 数据库,服务器版本: 5.7.26

你连接到的数据库是: python

MySQL连接已关闭

2. 第二套python
import tkinter as tk  # 导入 tkinter 库
from tkinter import ttk, messagebox  # 导入 ttk 和 messagebox 模块
import mysql.connector  # 导入 MySQL 连接器模块
from mysql.connector import Error  # 导入错误处理模块# 连接到数据库的函数
def connect_to_database(host, user, password, database):try:# 尝试建立数据库连接connection = mysql.connector.connect(host=host, user=user, password=password, database=database)return connection  # 如果成功连接,返回连接对象except Error as e:# 如果连接失败,显示错误消息框messagebox.showerror("连接错误", str(e))return None  # 连接失败时返回 None# 执行 SQL 查询的函数
def run_query(connection, query):cursor = connection.cursor()try:cursor.execute(query)  # 执行 SQL 查询if "select" in query.lower():results = cursor.fetchall()  # 如果是 SELECT 查询,则获取所有结果return resultselse:connection.commit()  # 提交其他类型的查询(INSERT、UPDATE、DELETE)的更改return cursor.rowcount  # 返回受影响的行数except Error as e:messagebox.showerror("SQL错误", str(e))  # 显示 SQL 错误的消息框finally:cursor.close()  # 关闭游标# 当点击提交按钮时触发的函数
def on_submit():# 使用提供的凭据尝试连接到数据库connection = connect_to_database(host_var.get(), user_var.get(), pass_var.get(), db_var.get())if connection:messagebox.showinfo("连接成功", "成功连接到数据库")  # 如果连接成功,显示成功消息connection.close()  # 关闭连接root = tk.Tk()  # 创建主窗口
root.title("数据库连接")  # 设置窗口标题style = ttk.Style(root)  # 定义窗口样式
style.theme_use("clam")  # 使用主题样式# 设置窗口大小和位置
window_width = 400
window_height = 400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width - window_width) // 2
y = (screen_height - window_height) // 2
root.geometry(f"{window_width}x{window_height}+{x}+{y}")center_frame = ttk.Frame(root)  # 创建一个居中的框架
center_frame.place(relx=0.5, rely=0.5, anchor=tk.CENTER)  # 放置在窗口中心# 创建输入字段和标签
host_var = tk.StringVar()
user_var = tk.StringVar()
pass_var = tk.StringVar()
db_var = tk.StringVar()ttk.Label(center_frame, text="主机地址").grid(row=0, column=0, padx=10, pady=10)
ttk.Entry(center_frame, textvariable=host_var).grid(row=0, column=1, padx=10, pady=10)ttk.Label(center_frame, text="用户名").grid(row=1, column=0, padx=10, pady=10)
ttk.Entry(center_frame, textvariable=user_var).grid(row=1, column=1, padx=10, pady=10)ttk.Label(center_frame, text="密码").grid(row=2, column=0, padx=10, pady=10)
ttk.Entry(center_frame, textvariable=pass_var, show="*").grid(row=2, column=1, padx=10, pady=10)ttk.Label(center_frame, text="数据库名称").grid(row=3, column=0, padx=10, pady=10)
ttk.Entry(center_frame, textvariable=db_var).grid(row=3, column=1, padx=10, pady=10)submit_btn = ttk.Button(center_frame, text="连接", command=on_submit)  # 创建连接按钮
submit_btn.grid(row=4, column=0, columnspan=2, pady=10)root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)root.mainloop()  # 运行主事件循环

执行python代码,运行结果如下:

在这个代码中,使用了messagebox.showerror和messagebox.showinfo这两个函数来创建弹框。

输入我们的数据库主机地址,数据库用户名,数据库密码,数据库名称。如果输入都是正确的,即弹出弹框,说明成功连接到数据库。

反之如果输入错误的话,即会返回连接错误。

3. 第三套python代码

最后一个才是所要讲解的python代码连接数据库后执行相关的sql操作,分别有静态和动态执行sql操作的python代码。代码需要注意的是xx部分是sql语句的执行内容,这个是要根据你自己数据库里的数据信息来填写再执行代码的。

a. 静态实现sql语句操作的python代码:
#静态执行sql语句操作import mysql.connector # 导入MySQL连接器模块
from mysql.connector import Error# 连接数据库
def connect_to_database(host, user, password, database):try:# 尝试建立数据库连接connection = mysql.connector.connect(host=host, user=user, password=password, database=database)print("数据库连接成功!")  # 连接成功提示return connection  # 返回连接对象except Error as e:print("数据库连接失败:", e)  # 连接失败提示return None# 执行 SQL 查询
def run_query(connection, query):cursor = connection.cursor()try:cursor.execute(query)  # 执行 SQL 查询if query.lower().startswith("select"):return cursor.fetchall()  # 如果是 SELECT 查询,返回所有结果else:connection.commit()  # 提交更改(INSERT、UPDATE、DELETE)return cursor.rowcount  # 返回受影响的行数except Error as e:print("SQL错误:", e)  # SQL 错误提示return Nonefinally:cursor.close()  # 关闭游标# 主函数
def main():host = input("请输入主机地址: ")  # 获取用户输入的主机地址user = input("请输入用户名: ")  # 获取用户输入的用户名password = input("请输入密码: ")  # 获取用户输入的密码database = input("请输入数据库名称: ")  # 获取用户输入的数据库名称connection = connect_to_database(host, user, password, database)  # 连接数据库if connection is None:returnwhile True:# 显示操作选项print("\n选择操作:")print("1. 查询")print("2. 插入")print("3. 更新")print("4. 删除")print("5. 退出")choice = input("请输入您的选择 (1-5): ")  # 获取用户选择if choice == "1":query = "SELECT * FROM view;"  # 查询语句elif choice == "2":query = "INSERT INTO view (id, name, count) VALUES (xx, 'xxx', xx);"  # 插入语句elif choice == "3":query = "UPDATE view SET name = 'xxx', count = xx WHERE id = xx;"  # 更新语句elif choice == "4":query = "DELETE FROM view WHERE id = xx;"  # 删除语句elif choice == "5":break  # 退出循环else:print("无效的选择!")  # 无效选择提示continueresult = run_query(connection, query)  # 执行用户选择的操作if isinstance(result, list):for row in result:print(row)  # 打印查询结果elif result is not None:print("操作成功,影响行数:", result)  # 打印受影响的行数if connection.is_connected():connection.close()  # 关闭数据库连接if __name__ == "__main__":main()  # 执行主函数

执行python代码,输入对应的数据库相关信息,输入正确即可显示以下内容:

数据库连接成功!

选择操作:

1. 查询

2. 插入

3. 更新

4. 删除

5. 退出

请输入您的选择 (1-5):

这里我先执行1操作,看输出结果。

执行2操作,看输出结果。

可以看到现在我们再次执行1操作查询时,已经比之前多出了一行数据,即(21, '忆梦_怀思', 39)。这个基于我数据库信息任意填写插入的一行信息,也可以改成其他的数据内容进行sql插入。

回到Navicat for MySQL,刷新一下刚才执行操作的数据库,可以看到现在数据库的信息内容更新了,就是多出的刚插入的那行信息内容。

这里还有一点需要强调一下,每次数据库进行刷新后,python是都要重新执行,并再次连接到数据库的。

执行3操作,看输出结果。

再次查看数据库内容,发现原本的(8, '怀思忆梦', 42)变为了现在的(8, '怀思_忆梦', 57),数据进行了更新。

再次刷新一下MySQL,可以看到里面的内容也进行了相应的更新操作。

执行4操作,看输出结果。

可以很明确的看到执行删除操作前后数据的变化,执行操作把(5, '怀思', 28)这行数据进行了删除。

同样再次刷新一下MySQL,可以看到里面的内容也进行了相应的删除操作。

最后执行5操作,就是直接退出连接数据库的意思。

这样我们就实现了利用python代码对于数据库的查询、插入、更新、删除等操作。

b. 动态实现sql语句操作的python代码:
#动态实现sql语句操作import mysql.connector  # 导入MySQL连接器模块
from mysql.connector import Error# 函数:连接到数据库
def connect_to_database(host, user, password, database):try:# 尝试连接到数据库connection = mysql.connector.connect(host=host, user=user, password=password, database=database)  # 使用给定的参数建立连接print("数据库连接成功!")  # 打印连接成功消息return connection  # 返回连接对象except Error as e:  # 捕获可能的错误print("数据库连接失败:", e)  # 打印连接失败消息return None  # 如果连接失败,返回空值# 函数:执行查询或修改
def run_query(connection, query):cursor = connection.cursor()  # 创建游标对象try:cursor.execute(query)  # 执行传入的SQL查询if query.lower().startswith("select"):  # 如果是SELECT查询return cursor.fetchall()  # 返回查询结果集else:  # 对于其他类型的查询(INSERT、UPDATE、DELETE等)connection.commit()  # 提交修改return cursor.rowcount  # 返回受影响的行数except Error as e:  # 捕获可能的错误print("SQL错误:", e)  # 打印SQL错误消息return None  # 返回空值finally:cursor.close()  # 最终关闭游标# 主函数
def main():host = input("请输入主机地址: ")  # 获取主机地址user = input("请输入用户名: ")  # 获取用户名password = input("请输入密码: ")  # 获取密码database = input("请输入数据库名称: ")  # 获取数据库名称connection = connect_to_database(host, user, password, database)  # 连接到数据库if connection is None:  # 如果连接失败,结束程序returnwhile True:print("\n选择操作:") # query = 右侧字符串的内容才是举例的sql执行语句print("1. 查询") # query = "SELECT * FROM view;"print("2. 插入") # query = "INSERT INTO view (id, name, count) VALUES (xx, 'xxx', xx);"print("3. 更新") # query = "UPDATE view SET name = 'xxx', count = xx WHERE id = xx;"print("4. 删除") # query = "DELETE FROM view WHERE id = xx;"print("5. 退出")choice = input("请输入您的选择 (1-5): ")  # 获取用户选择if choice in ["1", "2", "3", "4"]:  # 如果选择为1至4之间的数字query = input("请输入SQL语句: ")  # 获取用户输入的SQL语句result = run_query(connection, query)  # 执行用户输入的SQL语句if result is not None:  # 如果执行成功if isinstance(result, list):  # 如果返回的是查询结果集for row in result:  # 遍历结果并打印print(row)else:  # 对于INSERT、UPDATE、DELETE等操作if result > 0:print("操作成功,影响行数:", result)  # 打印受影响的行数else:print("操作失败,影响行数:", result)  # 打印受影响的行数else:print("请检查您的SQL语句并重试。")  # 如果SQL执行失败,提示用户检查语句elif choice == "5":  # 如果选择为5,退出程序breakelse:print("无效的选择,请输入1-5之间的数字。")  # 如果选择无效,提示用户重新输入if connection.is_connected():  # 如果数据库连接仍然处于打开状态connection.close()  # 关闭数据库连接if __name__ == "__main__":main()  # 运行主函数

执行1操作,这里就不是像静态那样直接输入选择就能执行sql指令的,需要自己输入对应的sql语句才能进行相应的操作。比如我输入SELECT * FROM view;

可以看到数据库信息的返回显示。

执行2操作,输入INSERT INTO view (id, name, count) VALUES (50, '怀思_hs', 78);

进行插入操作,成功添加数据(50, '怀思_hs', 78)。

返回MySQL查看当前的信息内容的变化,记录已成功添加。

执行2操作,输入UPDATE view SET name = '忆梦_ym', count = 100 WHERE id = 1;

数据已从(1, '忆梦', 15)更新为(1, '忆梦_ym', 100)

返回MySQL查看当前的信息内容的变化,记录已成功更新。

执行4操作,输入DELETE FROM view WHERE id = 21;

数据(21, '忆梦_怀思', 39)已被成功删除。

返回MySQL查看当前的信息内容的变化,记录已成功删除。

执行操作5,退出进程,断开和MySQL的连接。

以上就是关于python代码连接MySQL数据库并执行相关sql操作的全部内容。演示不易,内容可能有点多,不知道大家能不能看完,希望能给个点赞支持一下,嘿嘿。同时也欢迎大家进行讨论!

相关文章:

利用python连接MySQL数据库并执行相关sql操作

一、新建MySQL数据库 1.启动MySQL服务 打开phpstudy,开启MySQL服务。如果开启失败的话,可以打开任务管理器,把正在运行的mysqld服务的进程进行关闭,再次打开MySQL服务即可启动。 2.新建MySQL数据库 选择数据库,点击…...

jenkins配置

branch: "dev" 切换分支 $WORKSPACE: /var/lib/jenkins/workspace/jenkins任务名 dest_passwd服务器密码 变量 sudo sshpass -p $dest_passwd ssh root192.168.211.319 -tt rm -rf /data/patent/*:删除文件/data/patent/* sudo sshpa…...

LeNet对MNIST 数据集中的图像进行分类--keras实现

我们将训练一个卷积神经网络来对 MNIST 数据库中的图像进行分类,可以与前面所提到的CNN实现对比CNN对 MNIST 数据库中的图像进行分类-CSDN博客 加载 MNIST 数据库 MNIST 是机器学习领域最著名的数据集之一。 它有 70,000 张手写数字图像 - 下载非常简单 - 图像尺…...

Django的回顾的第4天

1.模型层 1.1简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别。 也就是说&#xff0c;HTML被直接硬编码在 Python代码之中。 def current_datetime(request):now datetime.datetime.now()html "<html><body>It is now %s.</body><…...

点云从入门到精通技术详解100篇-基于三维点云的工件曲面轮廓检测与机器人打磨轨迹规划(中)

目录 2.2.2 散乱点云滤波去噪 2.2.3 海量点云数据压缩 2.3 点云采集与预处理实验...

Mapper文件夹在resource目录下但是网页报错找不到productMapper.xml文件的解决

报错如下&#xff1a; 我的Mapper文件夹在resourse目录下但是网页报错找不到productMapper.xml。 结构如下&#xff1a;代码如下&#xff1a;<mappers><mapper resource"com/dhu/mapper/productMapper.xml" /> </mappers> 这段代码是在mybatis-co…...

22.Oracle中的临时表空间

Oracle中的临时表空间 一、临时表空间概述1、什么是临时表空间2、临时表空间的作用 二、临时表空间相关语法三、具体使用案例1、具体使用场景示例2、具体使用场景代码示例 点击此处跳转下一节&#xff1a;23.Oracle11g的UNDO表空间点击此处跳转上一节&#xff1a;21.Oracle的程…...

附录A 指令集基本原理

1. 引言 本书主要关注指令集体系结构4个主题&#xff1a; 1. 提出对指令集进行分类的方法&#xff0c;并对各种方法的优缺点进行定性评估&#xff1b; 2. 提出并分析一些在很大程度上独立于特定指令集的指令集评估数据。 3. 讨论语言与编译器议题以及…...

Unittest单元测试之unittest用例执行顺序

unittest用例执行顺序 当在一个测试类或多个测试模块下&#xff0c;用例数量较多时&#xff0c;unittest在执行用例 &#xff08;test_xxx&#xff09;时&#xff0c;并不是按从上到下的顺序执行&#xff0c;有特定的顺序。 unittest框架默认根据ACSII码的顺序加载测试用例&a…...

海云安谢朝海:开发安全领域大模型新实践 人工智能助力高效安全左移

2023年11月29日&#xff0c;2023中国&#xff08;深圳&#xff09;金融科技大会成功举行&#xff0c;该会议是深圳连续举办的第七届金融科技主题年度会议&#xff0c;也是2023深圳国际金融科技节重要活动之一。做好金融工作&#xff0c;需要兼顾创新与安全&#xff0c;当智能体…...

Postman接口测试工具完整教程

前言 作为软件开发过程中一个非常重要的环节&#xff0c;软件测试越来越成为软件开发商和用户关注的焦点。完善的测试是软件质量的保证&#xff0c;因此软件测试就成了一项重要而艰巨的工作。要做好这项工作当然也绝非易事。 第一部分&#xff1a;基础篇 postman:4.5.1 1.安…...

Android 滑动按钮(开关) SwitchCompat 自定义风格

原生的SwitchCompat控件如下图&#xff0c;不说不堪入目&#xff0c;也算是不敢恭维了。开个玩笑... 所以我们就需要对SwitchCompat进行自定义风格&#xff0c;效果如下图 代码如下 <androidx.appcompat.widget.SwitchCompatandroid:id"id/switch_compat"android:…...

前端面试灵魂提问-计网(2)

1、websocket 为什么全双工? 1.1 WebSocket是什么 WebSocket 是一种通信协议&#xff0c;它在客户端和服务器之间建立持久的全双工连接。全双工意味着数据可以双向流动&#xff0c;即客户端可以向服务器发送消息&#xff0c;服务器也可以向客户端发送消息&#xff0c;而无需…...

Git修改远程仓库名称

1、先直接在远程点仓库名&#xff0c;然后左侧菜单栏找settings-general&#xff0c;然后直接修改工程名&#xff0c;保存即可。 2、还是在settings-general下&#xff0c;下拉找到Advanced点击Expand展开&#xff0c;然后下拉到最底部 在Change path里填入新的项目名称&#x…...

kafka 集群 ZooKeeper 模式搭建

Apache Kafka是一个开源分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序 Kafka 官网&#xff1a;Apache Kafka 关于ZooKeeper的弃用 根据 Kafka官网信息&#xff0c;随着Apache Kafka 3.5版本的发布&#xff0c;Zookeeper现…...

【LeetCode】 160. 相交链表

相交链表 题目题解 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&am…...

TZOJ 1429 小明A+B

答案&#xff1a; #include <stdio.h> int main() {int T0, A0, B0, sum0;scanf("%d", &T); //输入测试数据的组数while (T--) //循环T次{scanf("%d %d", &A, &B); //输入AB的值sum A B;if (sum > 100) //如果是三位数{…...

制作openeuler的livecd

下载该项目&#xff0c;执行下面的操作gitee openeuler livecd项目 基于openeuler环境 #安装工具&#xff0c;第一次可能报错&#xff0c;可以再执行一次 make installx86 livecd-creator -d -v --config./config/euler_x86_64.ks --fslabeleuler-LiveCD --cachecache --log…...

B.牛牛排队伍——模拟双链表

当前位置: 首页 > news >正文 B.牛牛排队伍——模拟双链表 news 2023/12/1 15:14:37 分析 题目其实很简单,就是双链表的增删查,但是刚开始,直接vis标记删除元素,查找一个位置的前一个用的while不断向前找,但是TLE;毕竟O(n*k)的复杂度,一开始没有考虑时间复杂度…...

【PyTorch】(四)损失函数与优化器

文章目录 1. 损失函数2. 优化器 1. 损失函数 2. 优化器...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...