利用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 results
        else:
            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 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:
        return

    while 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("无效的选择!")  # 无效选择提示
            continue

        result = 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:  # 如果连接失败,结束程序
        return

    while 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,退出程序
            break
        else:
            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操作的全部内容。演示不易,内容可能有点多,不知道大家能不能看完,希望能给个点赞支持一下,嘿嘿。同时也欢迎大家进行讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ORACLE同义词说明及使用

同义词概念 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够…

基于SSM的经典电影推荐网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Python 流程控制

目录 程序流程 顺序结构 分支结构 单分支 双分支 多分支 if 嵌套 循环结构 while循环 for 循环 退出循环 循环与分支嵌套 附录 程序流程 程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句。可以通过控制语句实现更丰富的逻辑…

中国版的 GPTs:InsCode AI 生成应用

前言 在上一篇文章 《InsCode:这可能是下一代应用开发平台?》中,我们介绍了一个新的应用开发平台 InsCode,它是基于云原生开发环境 云 IDE AI 辅助编程的一站式在线开发平台。 最近,InsCode 又推出了另一种全新的开…

ASP.NET Core 使用IIS调试出现505.24错误

最近一直再学习asp.net 相关的东西&#xff0c;主要是为前端app提供一个webapi接口。在使用iis调试程序时出现HTTP Error 500.24 - Internal Server Error错误&#xff0c;搞了好久才最终解决。 1.在项目中增加web.config配置文件 2.将配置文件改为如下内容 <?xml version…

Unity | 渡鸦避难所-0 | 创建 URP 项目并导入商店资源

0 前言 知识点零零碎碎&#xff0c;没有目标&#xff0c;所以&#xff0c;一起做游戏吧 各位老师如果有什么指点、批评、漫骂、想法、建议、疑惑等&#xff0c;欢迎留言&#xff0c;一起学习 1 创建 3D&#xff08;URP&#xff09;项目 在 Unity Hub 中点击新项目&#xff…

Hive jar包冲突问题排查解决

1、报错情况 hiveserver2启动失败&#xff0c;查看日志报错&#xff1a; 2022-07-04T20:14:53,315 WARN [main]: server.HiveServer2 (HiveServer2.java:startHiveServer2(1100)) - Error starting HiveServer2 on attempt 1, will retry in 60000ms java.lang.NoSuchMethod…

Vue3中的组合式API的详细教程和介绍

文章目录 前言介绍组合式 API 基础setup 组件选项 带 ref 的响应式变量生命周期钩子注册内部 setupwatch 响应式更改独立的 computed 属性后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;vue.js &#x1f431;‍&#x1f453;博主在前端…

基于YOLOv8深度学习的120种犬类检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战、狗类检测、犬种识别

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

SpringMVC利用@ControllerAdvice和ResponseBodyAdvice接口统一处理返回值

在我们进行Java的Web应用开发时&#xff0c;如何写更少的代码&#xff0c;做更多的事情。如何让开发更容易上手&#xff0c;更专注于业务层面&#xff0c;不需要太关心底层的实现。这里就分享一些我平时在搭建基础框架时候的一些心得体验。 统一处理返回值 在web应用中&#x…

Python爬虫基础之Scrapy框架详解

目录 1. 简介2. Scrapy的安装3. Scrapy的架构4. Scrapy的数据流程5. Scrapy开发流程5.1 创建项目5.2 创建Spider5.3 创建Item5.4 编写Spider5.5 运行Spider 参考文献 原文地址&#xff1a;https://program-park.top/2023/12/01/reptile_5/ 本文章中所有内容仅供学习交流使用&am…

8、内部FLASH模拟EEPROM实验(STM32F407)

STM32编程方式 在线编程&#xff08;ICP,In-Circuit Programming&#xff09;: 通过JTAG/SWD协议或者系统加载程序(Bootloader)下载用户应用程序到微控制器中。 在程序中编程(IAP,In Application Programming):通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程…

2024 年综合网络安全审计清单

在网络威胁不断演变的时代&#xff0c;确保组织数据和系统的安全至关重要。 全面的网络安全审核清单可以在实现这一目标方面发挥关键作用。但是&#xff0c;什么才是有效的网络安全审核清单呢&#xff1f;以及如何对其进行定制以满足您组织的独特需求&#xff1f; 了解网络安…

【设计模式-2.3】创建型——原型模式

说明&#xff1a;本文介绍设计模式中&#xff0c;创建型中的原型模式&#xff1b; 飞机大战 创建型设计模式关注于对象的创建&#xff0c;原型模式也不例外。如简单工厂和工厂模式中提到过的飞机大战这个例子&#xff0c;游戏中飞机、坦克对象会创建许许多多的实例&#xff0…

水利安全监测方案——基于RTU200的解决方案

引言&#xff1a; 水资源是人类赖以生存的重要基础&#xff0c;对于保障水利系统安全运行以及应对自然灾害起着关键作用。为了实现水利安全监测的目标&#xff0c;我们提出了基于RTU200的解决方案。本方案将结合RTU200的可靠性、灵活性和高效性&#xff0c;为您打造一个全面的…

vue使用实现录音功能js-audio-recorder

前言 最近项目中需要实现一个录音上传功能&#xff0c;用于语音评论可以上录音。 下载插件&#xff1a; npm i js-audio-recorder完整代码 <template><div style"padding: 20px;"><h3>录音上传</h3><div style"font-size:14px"…

[Java学习日记]网络编程

目录 一.常见的软件架构、网络编程三要素、IP 二.利用UDP发送与接收数据 三.改聊天室 四.组播案例 五.TCP通信案例 一.常见的软件架构、网络编程三要素、IP 网络编程&#xff1a;在网络通信协议下&#xff0c;不同的计算机上运行的程序进行的数据传输 在Java中可以使用java…

Promise的resolve和reject方法(手写题)

1.resolve 2.reject 3.手写 1.resolve //构造函数上添加 resolve 方法 Promise.resolve function (value) {return new Promise((resolve, reject) > {if (value instanceof Promise) {value.then((val) > {resolve(val)},(err) > {reject(err)})} else {resolve(v…

springboot项目中注入bean后,调用时报n

需求&#xff1a; 在socket接收到上报数据后&#xff0c;在handler中调用工具类中ProtocolAnalyse的conAnalyse(byte[] data, int dataLen)解析数据。解析数据后&#xff0c;将解析后的结果保存至数据库。注入了三个bean&#xff1a; Autowiredprivate PersonTeService person…

基于融合正余弦和柯西变异的麻雀优化算法(SCSSA)-CNN-BiLSTM(双向长短期记忆网络)的时间序列预测模型

融合正余弦和柯西变异的麻雀优化算法&#xff08;SCSSA&#xff09;原理如下&#xff1a; ①采用折射反向学习策略初始化麻雀算法个体&#xff0c;基本思想是通过计算当前解的反向解来扩大搜索范围&#xff0c;借此找出给定问题更好的备选解&#xff1b;②采用正余弦策略替换原…