文章目录

  • 一、mysql表设计
  • 二、mysql orm生成
  • 三、修改orm
  • 四、mysql orm刷回数据库
  • 五、参考

背景: 建立一个数据库mydb, 含有一个表employee, employee_single通过id外键关联,实现删除employee记录关联删除employee_single对应的记录。刷出orm, 实现修改orm后可以自动将表修改部分刷回数据库。

一、mysql表设计

建库:

CREATE DATABASE mydb;

建表:employeeemployee_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生成

依赖安装:安装依赖库sqlacodegenSQLAlchemy

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实现自动升级相关推荐

  1. 关闭mysql凌晨自动升级功能

    某次在计划任务表中偶然发现Mysql默认安装时创建一个升级任务,触发时间正好是凌晨 1.win+R (运行)输入 taskschd.msc 2.找到mysql的计划任务,选中Installer,点击右 ...

  2. 如何使用GeneralUpdte构建客户端自动升级功能

    一.概要 本篇文章将向各位小伙伴介绍GeneralUpdate组件的使用,帮助第一次接触开发者快速上手应用在自己或企业项目中.如果本篇文章对您有帮助,希望帮忙点一下star.感谢各位开发者的支持. 帮 ...

  3. mysql命令面板数据更改_宝塔面板数据库自动停止解决办法,宝塔面板MySQL数据库自动重启shell脚本...

    宝塔的数据库经常性自动停止,是因为网站频繁的请求数据库,而服务器内存又不足,为了保证服务器不彻底卡死,保护性的自动停止数据库,特别是有些程序比如wordpress的数据库查询次数尤为突出,wordpr ...

  4. 从 MySQL 5.6 升级到 MySQL 8.0,Facebook 付出了什么代价?

    [编者按]近日,Facebook 官博公布了他们的数据库版本从 MySQL 5.6 升级到了 MySQL 8.0,并且在官博记录了复盘详细的升级过程. 作者 | Herman Lee,Pradeep ...

  5. 【转载】插件自动升级

    ESFramework介绍之(20)―― 插件自动升级 当我们的服务平台搭建成功后,所需要做的主要事情就是开发服务端功能插件(IFunAddin)和客户端插件(IPassiveAddin),每个插件对 ...

  6. 在WinForm中使用Web Services 来实现软件自动升级(转)

    一.升级的好处. 长期以来,广大程序员为到底是使用Client/Server,还是使用Browser/Server结构争论不休,在这些争论当中,C/S结构的程序的可维护性差,布置困难,升级不方便,维护 ...

  7. tomcat升级_「shell脚本」懒人运维之自动升级tomcat应用(war包)

    准备: 提前修改war包里的相关配置,并上传到服务器: 根据要自动升级的tomcat应用修改或添加脚本相关内容: tomcat启动脚本如是自己写的,要统一格式命名,如:xxx.xxxTomcat 等: ...

  8. 软件自动升级ftp服务器,国人自己的专业FTP服务器软件(上)

    目前FTP服务器软件都为国外作品,国内成熟的FTP服务器软件很少,有一些,但从功能上看来远不能和那些流行的服务器软件媲美.不过,笔者近日发现了一款国人自行开发的FTP服务器软件Crob FTP Ser ...

  9. Ionic实战 自动升级APP(Android版)

    Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...

最新文章

  1. 2010中国城市GDP排名
  2. 美国防部用AI消除“战争迷雾”,机器人、无人机全上阵
  3. this.name=name;和this.setName(name);的区别
  4. linux服务 运维案例,linux运维实战练习案例-2015年12月20日-12月31日
  5. 在Java虚拟机上班是一种怎样的体验?
  6. 《黑客》月刊中文版第一期正式发布,很给力!推荐围观!
  7. MVC HtmlHelperTModel 类
  8. 开机未发现nvidia控制面板_nvidia控制面板在哪?nvidia控制面板打不开怎么办?
  9. 解析torch.norm函数
  10. 常用的3D三维建模软件大全有哪些?
  11. ROBOMASTER机甲大师赛视觉组学习方案
  12. 日立电梯举办2018“新思维 新动能”创新分享汇
  13. discuzX1.5制作单页教程
  14. python爬虫入门(超详细!!!)
  15. 西南大学计算机学院推免,2019年西南大学计算机与信息科学学院硕士研究生拟录取名单的公示(不含推免生)...
  16. IDEA 出现问题:PSI and index do not match 解决方案
  17. MySQL - 调优(一)
  18. Linux 如何在 vi 里搜索关键字
  19. 微软裁员1万人,遣散费约54亿元,人均获赔54万!
  20. MgH2-grap金属Ni-Mg/C镍对镁碳复合储氢材料hene|Mg/C复合储氢材料复合储氢材料

热门文章

  1. 2021遥感应用组二等奖:流域水质,生态监测与形貌学分析—以洞庭湖流域为例
  2. /dev/random和/dev/urandom
  3. 激光切割教程(有线版)
  4. 银凤湖公园项目-工业矿坑变公园 | 用科技与艺术让城市“绽放”
  5. 【ABAQUS Material】density 行为
  6. socket.io简单说明及在线抽奖demo
  7. 二维码URL多种用法总结
  8. utf-8编码下,一个字符最多占几个字节?
  9. pytorch实现ShuffleNet
  10. 数据结构基础:P4.2-树(二)--->二叉平衡树