流程概要

  1. 下载mysql-8.0.11-winx64压缩包
  2. 解压
  3. 编辑配置文件my.ini
  4. 管理员权限cmd安装(注意初始化时设置默认密码为空)
  5. pymysql连接,执行sql操作。

代码实现

依赖:

import os
import zipfile
import pymysql
import ctypes, sys

解压:

zip_src = './mysql-8.0.11-winx64.zip'
dst_dir = os.getcwd() def unzip_file():
print('-----------解压中---------')
# zip_src: 是zip文件的全路径 mysql-8.0.11-winx64.zip
# dst_dir:是要解压到的目的文件夹的绝对路径
if not os.path.exists(dst_dir):
os.makedirs(dst_dir) # 创建路径
r = zipfile.is_zipfile(zip_src)
if r:
fz = zipfile.ZipFile(zip_src, 'r')
for file in fz.namelist():
fz.extract(file, dst_dir)
print(file)
print('-----------解压完成---------')
else:
print('unzip_error:This is not zip')

配置文件

def my_ini():
ini = f'''[mysqld]
# 设置3306端口
port=3306 # 设置mysql的安装目录
basedir={dst_dir}\mysql-8.0.11-winx64
# 设置 mysql数据库的数据的存放目录
datadir={dst_dir}\mysql-8.0.11-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10000
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
wait_timeout=31536000
interactive_timeout=31536000
#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
'''
with open(str(dst_dir) + '\mysql-8.0.11-winx64\my.ini', 'w', encoding='ANSI') as file:
file.write(ini)

注意保存为ANSI格式文件而不是UTF-8

获取管理员权限安装mysql

def is_admin():
# 管理员权限运行命令行
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False def install_db():
if is_admin():
# Code of your program here
os.chdir(f'{dst_dir}\mysql-8.0.11-winx64\\bin') # 切换bin目录
os.system('mysqld --initialize-insecure') # 初始化数据库 并设置默认密码为空
os.system('mysqld install') # 安装
os.system('net start mysql') # 启动
else:
# Re-run the program with admin rights
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)

这里mysqld --initialize-insecure将默认密码设置为空可以省很多麻烦,很有必要

连接mysql执行操作

def connect_mysql():
# 数据库连接 修改密码
try:
db = pymysql.connect(host='localhost',
user='root',
password="",
database='mysql') # 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL
cursor.execute("ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1';") # 修改密码
cursor.execute("flush privileges;") # 刷新权限
cursor.execute("CREATE DATABASE mydb;") # 创建数据库
# 关闭数据库连接
db.close()
print('修改密码、创建数据库(mydb)成功')
except:
print('修改密码、创建数据库失败')

主函数执行

def main():
unzip_file()
my_ini()
install_db()
connect_mysql()
input('输入任意字符后退出:') if __name__ == '__main__':
main()

ps:

因为使用时需要将py文件打包成exe可执行文件,于是加上input结束时手动退出

打包方法:

  • 进入py文件所在目录cmd,执行pyinstaller -F xxx.py
  • 将zip包复制到打包生成的dist目录下,与exe文件放在一起,右键管理员权限运行exe即可。
菜鸟摸索中,请大牛不吝指正(抱拳)

最新文章

  1. 领域驱动和MVVM应用于UWP开发的一些思考
  2. NGUI之输入文本框的使用
  3. web前端基础——补充
  4. ok6410 android driver(10)
  5. GitHub中wiki的Markdown编辑方法!!
  6. zjuoj 3603 Draw Something Cheat
  7. App Naver Line 5.3 add new features - "True Delete"
  8. hive[3] 数据类型和文件格式
  9. Python的基础--对象 转
  10. linux线程(一)基本应用
  11. 设计模式 - 观察者模式(Observer Pattern) 详细说明
  12. 在美国公司架构中,LLC、LLP 和 Corporation 的区别何在?
  13. PLSQL:[1]plsql中文乱码,显示问号
  14. jQuery Fancybox插件介绍
  15. 摘抄来自论坛的一些DDD讨论
  16. @dynamic、@synthesize
  17. netsh导入导出IPSec配置策略
  18. PS不能存储,因为程序错误
  19. 201521123014 《Java程序设计》第7周学习总结
  20. 【BZOJ3529】【SDOI2014】数表

热门文章

  1. Java项目有可能做到所有的代码逻辑均可热部署吗?
  2. 《Hierarchical Text-Conditional Image Generation with CLIP Latents》阅读笔记
  3. mysql数据库报错 sql 1452 Cannot add or update a child row:a foreign key constraint fails
  4. PyTorch Geometric Temporal 介绍 —— 数据结构和RGCN的概念
  5. kettle 链接oracle12c
  6. 【笔面试真题】ThoughtWorks-笔试-2022年1月21日
  7. HDOJFatmouse肥鼠交易//c++控制保留小数
  8. Appium工具
  9. Jmeter 逻辑控制器之吞吐量控制器(Throughput Controller)
  10. 从一道CTF题学习python字节码到源码逆向