Mysql实现自动升级
文章目录
- 一、mysql表设计
- 二、mysql orm生成
- 三、修改orm
- 四、mysql orm刷回数据库
- 五、参考
背景: 建立一个数据库mydb, 含有一个表employee, employee_single通过id外键关联,实现删除employee记录关联删除employee_single对应的记录。刷出orm, 实现修改orm后可以自动将表修改部分刷回数据库。
一、mysql表设计
建库:
CREATE DATABASE mydb;
建表:employee
、employee_single
CREATE TABLE `employee` (`PID` int(11) unsigned NOT NULL AUTO_INCREMENT,`ID` varchar(64) DEFAULT NULL COMMENT 'this is employee id',`Name` varchar(64) NOT NULL DEFAULT '' COMMENT 'this is employee name',`UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`Extend0` varchar(100) DEFAULT NULL,PRIMARY KEY (`PID`),UNIQUE KEY `id_idx` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=800 DEFAULT CHARSET=utf8;
CREATE TABLE `employee_single` (`PID` int(11) unsigned NOT NULL AUTO_INCREMENT,`ID` varchar(64) NOT NULL DEFAULT '' COMMENT 'this is employee id',`addr` varchar(64) NOT NULL DEFAULT '' COMMENT 'this is employee addr',`age` int(11) NOT NULL DEFAULT '0' COMMENT 'this is employee age',PRIMARY KEY (`PID`),UNIQUE KEY `id_idx` (`ID`),CONSTRAINT `fk_employee_single` FOREIGN KEY (`ID`) REFERENCES `employee` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2189 DEFAULT CHARSET=utf8;
二、mysql orm生成
依赖安装:安装依赖库sqlacodegen
、SQLAlchemy
pip install sqlacodegen
生成orm:
sqlacodegen --outfile employee_object.py mysql+pymysql://root:yourpassword@localhost/mydb
三、修改orm
在生成的orm文件employee_object.py
中添加字段,如在employee_single
表添加Phone
, 直接修改orm那么原来的class EmployeeSingle
变成如下:
class EmployeeSingle(Base):__tablename__ = 'employee_single'PID = Column(INTEGER(11), primary_key=True)ID = Column(ForeignKey('employee.ID', ondelete='CASCADE'), nullable=False, unique=True, server_default=text("''"), comment='this is employee id')addr = Column(String(64), nullable=False, server_default=text("''"), comment='this is employee addr')age = Column(INTEGER(11), nullable=False, server_default=text("'0'"), comment='this is employee age')Phone = Column(String(32), nullable=False, server_default=text("'0'"), comment='this is employee phone')employee = relationship('Employee')
你也可以直接修改数据库,然后用第二步方法生成新的orm
四、mysql orm刷回数据库
安装依赖:
pip install alembic
在orm employee_object.py
同级目录创建一个文件,employee_orm_update.py
用于将orm修改刷回数据库。
代码如下:
#!encoding=utf-8
import os
import re
import shutil
import pymysql
from os.path import dirname, abspathhost_name = "127.0.0.1"
password = "yourpassword"
db = "mydb"
port = 3306class EmployeeUpgrade:def __init__(self):self.connect = pymysql.connect(host=host_name, port=port, user='root', passwd=password, local_infile=True,charset='utf8')self.cur = self.connect.cursor()self.delete_config()self.cur.execute("Create Database If Not Exists {} Character Set UTF8;".format(db))self.cur.execute("use {};".format(db))self.cur.execute("drop table if exists alembic_version;")self.change_config()@classmethoddef change_config(cls):os.system("alembic init alembic")cls.config_util(os.path.join(dirname(abspath(__file__)), "alembic.ini"), 'sqlalchemy.url =','sqlalchemy.url = mysql+pymysql://root:{0}@{1}:{2}/{3}'.format(password, host_name, port, db))cls.config_util(os.path.join(dirname(abspath(__file__)), 'alembic', 'env.py'),'target_metadata = None','from employee_object import Base\n''target_metadata = Base.metadata')@classmethoddef config_util(cls, config_path, s_from, s_to):config_str = ''with open(config_path, 'r', encoding='utf-8') as f:str_list = f.readlines()for s in str_list:if len(re.findall("^{0}".format(s_from), s)) > 0:s = s_to + '\n'config_str += swith open(config_path, 'w', encoding='utf-8') as f:f.write(config_str)@staticmethoddef delete_config():try:if os.path.exists(os.path.join(dirname(abspath(__file__)), 'alembic')):shutil.rmtree(os.path.join(dirname(abspath(__file__)), 'alembic'))os.remove(os.path.join(dirname(abspath(__file__)), 'alembic.ini'))except Exception as ex:print(str(ex))def up_to_date(self):os.system("alembic revision --autogenerate -m 'init'")os.system("alembic upgrade head")self.delete_config()if __name__ == '__main__':EmployeeUpgrade().up_to_date()
核心代码:
执行:
alembic init alembic
修改:
alembic.ini
env.py
执行
alembic revision --autogenerate -m 'init'
alembic upgrade head
五、参考
- sqlacodegen: 链接
- SQLAlchemy 链接
- Alembic 链接
Mysql实现自动升级相关推荐
- 关闭mysql凌晨自动升级功能
某次在计划任务表中偶然发现Mysql默认安装时创建一个升级任务,触发时间正好是凌晨 1.win+R (运行)输入 taskschd.msc 2.找到mysql的计划任务,选中Installer,点击右 ...
- 如何使用GeneralUpdte构建客户端自动升级功能
一.概要 本篇文章将向各位小伙伴介绍GeneralUpdate组件的使用,帮助第一次接触开发者快速上手应用在自己或企业项目中.如果本篇文章对您有帮助,希望帮忙点一下star.感谢各位开发者的支持. 帮 ...
- mysql命令面板数据更改_宝塔面板数据库自动停止解决办法,宝塔面板MySQL数据库自动重启shell脚本...
宝塔的数据库经常性自动停止,是因为网站频繁的请求数据库,而服务器内存又不足,为了保证服务器不彻底卡死,保护性的自动停止数据库,特别是有些程序比如wordpress的数据库查询次数尤为突出,wordpr ...
- 从 MySQL 5.6 升级到 MySQL 8.0,Facebook 付出了什么代价?
[编者按]近日,Facebook 官博公布了他们的数据库版本从 MySQL 5.6 升级到了 MySQL 8.0,并且在官博记录了复盘详细的升级过程. 作者 | Herman Lee,Pradeep ...
- 【转载】插件自动升级
ESFramework介绍之(20)―― 插件自动升级 当我们的服务平台搭建成功后,所需要做的主要事情就是开发服务端功能插件(IFunAddin)和客户端插件(IPassiveAddin),每个插件对 ...
- 在WinForm中使用Web Services 来实现软件自动升级(转)
一.升级的好处. 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序的可维护性差,布置困难,升级不方便,维护 ...
- tomcat升级_「shell脚本」懒人运维之自动升级tomcat应用(war包)
准备: 提前修改war包里的相关配置,并上传到服务器: 根据要自动升级的tomcat应用修改或添加脚本相关内容: tomcat启动脚本如是自己写的,要统一格式命名,如:xxx.xxxTomcat 等: ...
- 软件自动升级ftp服务器,国人自己的专业FTP服务器软件(上)
目前FTP服务器软件都为国外作品,国内成熟的FTP服务器软件很少,有一些,但从功能上看来远不能和那些流行的服务器软件媲美.不过,笔者近日发现了一款国人自行开发的FTP服务器软件Crob FTP Ser ...
- Ionic实战 自动升级APP(Android版)
Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...
最新文章
- 2010中国城市GDP排名
- 美国防部用AI消除“战争迷雾”,机器人、无人机全上阵
- this.name=name;和this.setName(name);的区别
- linux服务 运维案例,linux运维实战练习案例-2015年12月20日-12月31日
- 在Java虚拟机上班是一种怎样的体验?
- 《黑客》月刊中文版第一期正式发布,很给力!推荐围观!
- MVC HtmlHelperTModel 类
- 开机未发现nvidia控制面板_nvidia控制面板在哪?nvidia控制面板打不开怎么办?
- 解析torch.norm函数
- 常用的3D三维建模软件大全有哪些?
- ROBOMASTER机甲大师赛视觉组学习方案
- 日立电梯举办2018“新思维 新动能”创新分享汇
- discuzX1.5制作单页教程
- python爬虫入门(超详细!!!)
- 西南大学计算机学院推免,2019年西南大学计算机与信息科学学院硕士研究生拟录取名单的公示(不含推免生)...
- IDEA 出现问题:PSI and index do not match 解决方案
- MySQL - 调优(一)
- Linux 如何在 vi 里搜索关键字
- 微软裁员1万人,遣散费约54亿元,人均获赔54万!
- MgH2-grap金属Ni-Mg/C镍对镁碳复合储氢材料hene|Mg/C复合储氢材料复合储氢材料
热门文章
- 2021遥感应用组二等奖:流域水质,生态监测与形貌学分析—以洞庭湖流域为例
- /dev/random和/dev/urandom
- 激光切割教程(有线版)
- 银凤湖公园项目-工业矿坑变公园 | 用科技与艺术让城市“绽放”
- 【ABAQUS Material】density 行为
- socket.io简单说明及在线抽奖demo
- 二维码URL多种用法总结
- utf-8编码下,一个字符最多占几个字节?
- pytorch实现ShuffleNet
- 数据结构基础:P4.2-树(二)--->二叉平衡树