MySQL win安装 和 pymysql使用示例

news2025/4/17 19:22:20

目录

一、MySQL安装

下载压缩包:

编写配置文件: 

配置环境变量:

初始化服务和账户

关闭mysql开机自启(可选) 

建议找一个数据库可视化软件

二、使用pymysql操作数据库

安装pymysql

示例代码

报错处理


一、MySQL安装

下载压缩包:

MySQL :: Download MySQL Community Server

进入上述网址,默认是最新版,我们下载第二项,压缩包。

下载后解压

编写配置文件: 

在解压出来的文件夹中创建my.ini配置文件,文件内容如下:

[mysqld]  
#设置 3306 端口  
port = 3306  

# 设置 mysql 的安装目录  
basedir= D:\mysql-9.1.0-winx64

# 设置 mysql 数据库的数据的存放目录  
datadir= D:\mysql-9.1.0-winx64\data  

# 允许最大连接数  
max_connections=200  

# 创建新表时将使用的默认存储引擎  
default-storage-engine=INNODB

# 服务端使用的字符集默认为 8 比特编码的 latin1 字符集  
character-set-server=utf8  

配置环境变量:

在系统变量中添加MYSQL_HOME项目值为你的mysql文件夹位置,

比如我的是D:\mysql-9.1.0-winx64

 然后向Path中添加一条值:%MYSQL_HOME%\bin

初始化服务和账户

使用管理员cmd,进入该文件夹下的bin目录。 执行:mysqld install

显示Service successfully installed.即成功安装mySQL服务。

使用mysqld --initialize-insecure 命令生成无密码的root用户,

使用net start mysql即可启动mysql服务。

接下来设置用户密码,依次输入下面四条命令:

mysql -uroot

create user 'test'@'localhost' identified by 'mysql';

grant all privileges on *.* to test@'localhost';

exit

第一条是用root用户登录,由于之前没设置root用户密码,所以无需密码,

第二条是创建本地用户,用户名为 test,密码为mysql(你可以换成别的名字和密码)

第三条是赋予该用户所有权限

最后一条是关闭MySQL监视器

 接下来以test登录,修改root密码:

mysql -utest -pmysql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql';
FLUSH PRIVILEGES;
EXIT;
mysql -uroot -pmysql

成功以密码登录root。

关闭mysql开机自启(可选) 

直接在搜索框搜索‘服务’,在服务中找到mysql,右键-属性,将启动类型改为手动。

建议找一个数据库可视化软件

        我使用的数据库可视化软件:Navicat Premium,需要付费,网上有白嫖教程,这就不说了。

二、使用pymysql操作数据库

安装pymysql

 首先使用以下命令或者其他你喜欢的方式安装pymysql:

pip install pymysql

示例代码

现在我们就能使用pymysql操作数据库了,先尝试运行下面代码, 

import pymysql

database_name = 'testmysql'
delete_database = True  # 删库
# delete_database = False  # 不删库

connection = pymysql.connect(  # 建立链接
    host='localhost',  # 主机位置(本地)
    port=3306,  # 端口
    user='test',  # 用户名
    password='mysql',  # 密码
    charset='utf8mb4',  # 字符集
    # database=database_name,  # 数据库名
)

# 创建数据库‘testmysql’,IF NOT EXISTS 如果不存在才执行
create_database_sql = f'CREATE DATABASE IF NOT EXISTS {database_name};'
show_sql = 'SHOW databases'  # 查询数据库
goto_database = f'USE {database_name}'  # 选择操作的数据库

# 创建班级表
create_table_Classes_sql = '''
CREATE TABLE IF NOT EXISTS 班级 (             -- 创建Classes表(班级)
    班号 INT AUTO_INCREMENT PRIMARY KEY,      -- 班级id int 自动递增 且为主键,主键自动递增比较好管理
    班名 VARCHAR(100) NOT NULL,               -- 班名 可变长字符串,不能为空
    班导 VARCHAR(100)                         -- 班主任 可空(让我想起了当年一学年换5次班主任)
);
'''
# 创建学生表
create_table_Students_sql = '''
CREATE TABLE IF NOT EXISTS 学生 (                     -- 创建Students表(学生)
    学号 INT AUTO_INCREMENT PRIMARY KEY,              -- 学号 int 自动递增 且为主键
    姓名 VARCHAR(100) NOT NULL,                       -- 学生名 可变长字符串,不能为空
    性别 ENUM('男', '女', '其他','直升机') NOT NULL,    -- 枚举类型的性别
    民族 VARCHAR(50),
    班级 INT,          -- 班级为外键,注意ON DELETE CASCADE表示级联删除,班没了学生外键班级也会删除,
                        -- CASCADE ON UPDATE CASCADE 表示级联更新,班号要是改了,这里也会同步更改
    FOREIGN KEY (班级) REFERENCES 班级(班号) ON DELETE CASCADE ON UPDATE CASCADE
);
'''
delete_database_sql = f'DROP DATABASE IF EXISTS {database_name};'  # 若存在,删库(删库跑路)

try:
    with connection.cursor() as cursor:  # 创建游标对象
        cursor.execute(show_sql)  # 执行 查询 sql语句
        all_database_name = cursor.fetchall()  # 获取查询所有行
        if not (database_name,) in all_database_name:  # 返回了元组所以需要包装一下
        # if True:
            # 建库===================================================================
            cursor.execute(create_database_sql)  # 执行 创建 sql语句
            cursor.execute(show_sql)  # 查看创建好了没(有问题一般就报错了,通常不用看)
            all_database_name = cursor.fetchall()
            if (database_name,) in all_database_name:
                print('数据库创建完成')
            cursor.execute(goto_database)  # 选择操作的数据库
            # 建表===================================================================
            cursor.execute(create_table_Classes_sql)
            cursor.execute(create_table_Students_sql)
            # connection.commit()  # 建库,建表都会隐式提交,不需要写提交事务语句,同时也无法回滚
            # 增===================================================================
            insert_Class_sql = '''
                INSERT INTO 班级 (班名, 班导) VALUES (%s, %s),(%s, %s),(%s, %s)
            '''
            data_Class = ['日升班', '道光', '伏流班', '汪洋', '腾渊班', '菲杨']
            cursor.execute(insert_Class_sql, data_Class)
            insert_Students_sql = '''
                INSERT INTO 学生 (姓名, 性别,民族,班级) VALUES (%s, %s, %s, %s)
            '''
            name = ['赵匡胤', '钱镠', '孙悟空', '武曌', '曹雪芹', '杰瑞', '张三', '约翰·纳什', '武直-10']
            sex0 = ['男', '男', '男', '女', '男', '其他', '男', '男', '直升机']  # 枚举类型,如果填别的会报错
            nati = ['汉', '汉', '汉', '汉', '满', '米奇', '汉', '维京', '中华民族']
            clas = [2, 3, 3, 2, 1, 1, 1, 2, 3]  # 注意,因为主键自动递增控制,所以,初始设置的三个班主键分别为1,2,3
            data = [[name[i], sex0[i], nati[i], clas[i], ] for i in range(len(name))]
            cursor.executemany(insert_Students_sql, data)
            connection.commit()  # 通常来说,事件全完成再提交,这里是为了方便打断点看
            # 删===================================================================
            # 听说,生产环境中不删数据,只设置一个变量,查询不显示。
            delete_sql = 'DELETE FROM 学生 WHERE 姓名=%s;'  # 删掉学生:杰瑞
            cursor.execute(delete_sql, '杰瑞')
            # cursor.execute(delete_sql, ('杰瑞',))   # 一个参数没什么格式要求
            # cursor.execute(delete_sql, (('杰瑞'),))
            connection.commit()
            # 改===================================================================
            change_sql = 'UPDATE 学生 SET 性别 = %s,民族 = %s WHERE 姓名 = %s;'  # 悟空天生地养,无族无性
            cursor.executemany(change_sql, (('其他', None, '孙悟空'),))
            # cursor.executemany(change_sql, [['其他', None, '孙悟空']])  # 列表也行
            connection.commit()
            # 查===================================================================
            select_classes_sql = 'SELECT * FROM 班级'  # 显示所有班级
            cursor.execute(select_classes_sql)
            classes = cursor.fetchall()
            print('班级有:')
            for class_info in classes:
                print(class_info)
            # 跨表方式1
            select_students_sql = '''
                SELECT * FROM 学生 
                WHERE 班级 in (SELECT 班号 FROM 班级 WHERE 班名 = %s);
            '''
            cursor.execute(select_students_sql, '腾渊班')  # 查询腾渊班的学生
            students = cursor.fetchall()
            print('腾渊班的学生有:')
            for student_info in students:
                print(student_info)
            # 跨表方式2
            select_students_sql = '''
                SELECT 学生.*
                FROM 学生 JOIN 班级 ON 学生.班级 = 班级.班号
                WHERE 班级.班名 = %s;
            '''
            cursor.execute(select_students_sql, '伏流班')  # 查询伏流班的学生
            students = cursor.fetchall()
            print('伏流班的学生有:')
            for student_info in students:
                print(student_info)
            # 查不修改数据,无需提交
            # 删库==================================================================
            if delete_database:
                cursor.execute(delete_database_sql)  # 删库
                cursor.execute(show_sql)  # 查询
                all_database_name = cursor.fetchall()  # 获取查询所有行,返回列表
                if not (database_name,) in all_database_name:
                    print('数据库删除完成')
            else:
                print('未删除数据库')
        else:
            print(f"存在 {database_name} 数据库,为防止删除重要数据数据,已停止执行测试程序")
    # 提交事务
    connection.commit()
except pymysql.MySQLError as e:
    print(f"Error: {e}")
    connection.rollback()  # 回滚
finally:
    # 关闭数据库连接
    connection.close()
    print('链接已关闭')

报错处理

如果报错:

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

安装包:cryptography 

        这段代码会创建,修改,然后删除名为testmysql的数据库,如果提示数据库已存在,请更改变量database_name的值,建议打上断点,借助数据库可视化软件观看执行过程。

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

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

相关文章

Parker派克防爆电机在实际应用中的安全性能如何保证?

Parker防爆电机确保在实际应用中的安全性能主要通过以下几个方面来保证: 1.防爆外壳设计:EX系列电机采用强大的防爆外壳,设计遵循严格的防爆标准,能够承受内部可能发生的爆炸而不破损,利用间隙切断原理,防…

空间与单细胞转录组学的整合定位肾损伤中上皮细胞与免疫细胞的相互作用

result 在空间转录组图谱中对人类肾脏进行无监督映射和细胞类型鉴定 我们试图在H&E染色的人类参考肾切除标本组织切片上直接映射转录组特征。该组织来自一名59岁的女性,其肾小球闭塞和间质纤维化程度最低(分别影响不到10%的肾小球或肾实质&#xff…

greater<>() 、less<>()及运算符 < 重载在排序和堆中的使用

简略图 greater<>()(a, b) a > b 返回true&#xff0c;反之返回false less<>()(a, b) a < b 返回true&#xff0c;反之返回false 在cmp中使用&#xff08;正着理解&#xff09; 规则返回true时a在前&#xff0c;反之b在前 在priority_queue中使用 &#xff…

详细描述一下Elasticsearch索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch索引文档的过程&#xff1f; Elasticsearch的索引文档过程是其核心功能之一&#xff0c;涉及将数据存储到…

入门车载以太网(6) -- XCP on Ethernet

目录 1.寻址方式 2.数据帧格式 3.特殊指令 4.使用实例 了解了SOME/IP之后&#xff0c;继续来看看车载以太网在汽车标定领域的应用。 在汽车标定领域XCP是非常重要的协议&#xff0c;咱们先来回顾下基础概念。 XCP全称Universal Measurement and Calibration Protocol&a…

Python中常用的函数介绍

Python中常用的几种函数 1、input函数 input()函数&#xff1a;主要作用是让用户输入某个内容并接收它。 #输入你的年龄 >>> age input("my age is :") my age is :20 执行代码后输入年龄&#xff0c;年龄被存放到age变量中&#xff0c;执行print后终端会…

Ubuntu从入门到精通(二)远程和镜像源配置齐全

Ubuntu从入门到精通(二) 1 常见操作配置 1.1 英文语言配置 1.1.1 打开设置 1.1.2 设置语言为英文 1.1.3 重启生效 1.1.4 再次进入,选择更新名字 1.1.5 再次进入,发现已经变成了英文 1.2 输入法配置 1.3 rustdesk安装 1.3.1 Windows系统配置 登陆:https://github.com…

卷积神经网络(CNN)中的池化层(Pooling Layer)

池化层&#xff08;Pooling Layer&#xff09;&#xff0c;也被称为下采样层&#xff0c;是深度学习神经网络中常用的一种层级结构。它通常紧跟在卷积层之后&#xff0c;对卷积层输出的特征图进行下采样操作。 一、定义与功能 池化层的主要作用是通过减少特征图的尺寸来降低计算…

【linux硬件操作系统】计算机硬件常见硬件故障处理

这里写目录标题 一、故障排错的基本原则二、硬件维护注意事项三、关于最小化和还原出厂配置四、常见故障处理及调试五、硬盘相关故障六、硬盘相关故障&#xff1a;硬盘检测问题七、硬盘相关故障&#xff1a;自检硬盘报错八、硬盘相关故障&#xff1a;硬盘亮红灯九、硬盘相关故障…

《操作系统》实验内容 实验二 编程实现进程(线程)同步和互斥(Python 与 PyQt5 实现)

实验内容 实验二 编程实现进程&#xff08;线程&#xff09;同步和互斥 1&#xff0e;实验的目的 &#xff08;1&#xff09;通过编写程序实现进程同步和互斥&#xff0c;使学生掌握有关进程&#xff08;线程&#xff09;同步与互斥的原理&#xff0c;以及解决进程&#xf…

智慧路面管理系统平台 智慧照明 智慧市政 智慧交通

智慧路面管理系统平台   智慧路面管理系统平台&#xff0c;旨在提高城市道路的智能化水平和交通效率。该系统通过集成传感器、摄像头、监控设备、大数据、云计算等多种技术手段&#xff0c;实现对道路状况和交通流量的实时监测与分析&#xff0c;从而提供精准的交通数据和智能…

数据结构 ——— 判断一棵树是否是完全二叉树

目录 满二叉树和完全二叉树示意图 手搓一个完全二叉树 代码实现 满二叉树和完全二叉树示意图 注意区分满二叉树和完全二叉树 满二叉树的每一层都是满的&#xff0c;也就是除了叶子节点&#xff0c;其他节点都有左右节点 完全二叉树的最后一层不一定是满的&#xff0c;但是从…

Vue_Router权限控制:不同角色显示不同路由

写在前面 在Vue中&#xff0c;Router是一个官方提供的用于处理应用程序路由的插件。它允许我们创建单页应用程序&#xff08;SPA&#xff09;&#xff0c;其中不同的页面和组件可以通过URL进行导航和展示。使我们可以轻松地创SPA&#xff0c;并实现可复用和可组合的组件…

java多线程并发执行方法或者调用接口

在开发过程中有时需要检查某个接口或者某个方法是否存在并发安全问题&#xff0c;我们会用到jmeter 、AB 等压测工具辅助我们完成代码测试&#xff0c;虽然这些工具功能很强大&#xff0c;也很好用&#xff0c;但是在开发过程中来使用还是不如直接执行Test 或者main 方法来的方…

Python小游戏28——水果忍者

首先&#xff0c;你需要安装Pygame库。如果你还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; 【bash】 pip install pygame 《水果忍者》游戏代码&#xff1a; 【python】 import pygame import random import sys # 初始化Pygame pygame.init() # 设置屏幕尺寸 …

测评部署和管理 WordPress 最方便的面板

新版宝塔面板快速搭建WordPress新手教程 - 倚栏听风-Morii - 博客园 初学者使用1Panel面板快速搭建WordPress网站 - 倚栏听风-Morii - 博客园 可以看到&#xff0c;无论是宝塔还是1Panel&#xff0c;部署和管理WordPress都有些繁琐&#xff0c;而且还需要额外去配置Nginx和M…

OpenAI Adjusts Strategy as ‘GPT’ AI Progress Slow

注&#xff1a;本文为两篇关于当前大模型方向讨论的文章。 OpenAI 大改下代大模型方向&#xff0c;scaling law 撞墙&#xff1f;AI 社区炸锅了 机器之心 2024 年 11 月 11 日 11:57 北京 机器之心报道 编辑&#xff1a;Panda、泽南 大模型的 scaling law 到头了&#xff1f…

Java开发者必备:23种设计模式全面解析

文章目录 一、创建型模式1、工厂模式简单工厂工厂方法 2、抽象工厂模式3、原型模式4、建造者模式5、单例模式 二、结构型模式1、适配器模式2、桥接模式3、组合模式4、装饰模式5、外观模式6、享元模式7、代理模式 三、行为型模式1、解释器模式2、模板方法模式3、策略模式4、观察…

LeetCode:1008. 前序遍历构造二叉搜索树

目录 题目描述: 代码: 第一种: 第二种: 第三种:分治法 题目描述: 给定一个整数数组&#xff0c;它表示BST(即 二叉搜索树 )的 先序遍历 &#xff0c;构造树并返回其根。 保证 对于给定的测试用例&#xff0c;总是有可能找到具有给定需求的二叉搜索树。 二叉搜索树 是一棵…

STM32F103 GPIO和串口实战

本节我们将会对STM32F103的硬件资源GPIO和串口进行介绍。 一、GPIO 1.1 电路原理图 LED电路原理图如下图所示&#xff1a; 其中&#xff1a; LED1连接到PA8引脚&#xff0c;低电平点亮&#xff1b;LED2连接到PD2引脚&#xff0c;低电平点亮&#xff1b; 1.2 GPIO引脚介绍 STM32…