小技巧 | 聊聊 Python 中数据库反向生成 Model 最优方案

1. 前言

大家好,我是安果!

熟悉 Django 的朋友应该知道,我们可以通过「 inspectdb 」命令将数据库表反向生成 Model 并写入到文件中去

比如,Django 项目映射数据库中有一张 student 表,我们希望反向生成 Model 并写入到本地文件 models.py 文件中

只需要输入下面命令:

# 反向生成Model
# 进入到项目根目录,输入下面的命令
# 其中
# student:映射数据库的student数据表
# 写入到index App 下的models.py文件内
python3 manage.py inspectdb student > index/models.py

但如果是一个普通 Python 项目,如何反向生成 Model 呢?

2. 普通项目反向生成 Model

假设项目使用「 sqlalchemy 」连接操作数据库

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('mysql+pymysql://{}:{}@{}:{}/{}'.format(user, password, host, port, database), echo = True)
session = sessionmaker(bind=self.engine)()

...

接着,我们安装依赖「 sqlacodegen 」

# 安装依赖
pip3 install sqlacodegen

这样,我们就可以使用 sqlacodegen 命令关联数据库表,在本地一键生成 Model 了

def generate_orm_table(db_ip, db_name, table_name, output, username='root', pwd='root', port=3306):
    """
    生成orm数据表
    :return:
    """
    exec_cmd(
        'sqlacodegen --tables {} --outfile {} mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
            table_name, output, username, pwd, db_ip, port, db_name))

if __name__ == '__main__':
    # 生成orm数据库表
    table_name = 'zlb_users'

# 生成Model
    generate_orm_table("192.168.*.*", "db_name", "table_name", "./../model/{}.py".format(table_name))

3. 最后

虽然可以通过命令行一键生成 Model,但是生成的部分字段可能存在误差,需要手动进行调整一下

比如,数据库如果某个字段为时间 datetime,反向生成 Model 中的 DateTimeField 字段参数值需要略微调整

(0)

相关推荐

  • 经验分享:如何零基础开始自学Python编程(下)

    这样做的好处是什么呢?虽然你最终在浏览器里看到的是一个完整的页面,但是在后端逻辑上它们都是区分开的--模型(M),视图(V)和控制器(C)的区分就保证了较高的可维护性--我可以随时修改主页的显示并看到 ...

  • python sqlalchemy 根据数据库自动生成实体类

    第一步 安装包 pip install sqlacodegen pip install pymysql pip install mysqlclient 第二步 修改sqlacodegen包下的__in ...

  • awesome asyncio-精选python异步框架清单集合

    Python 3.4引入标准库的Python asyncio模块提供了使用协程编写单线程并发代码,通过套接字和其他资源对I / O进行多路访问,运行网络客户端和服务器以及其他相关原语的基础结构. As ...

  • Python之Flask框架:Flask框架简介、安装、使用方法详细攻略

    Python之Flask框架:Flask框架简介.安装.使用方法详细攻略 Flask框架简介 对初学者来说,循序渐进是最重要的,我推荐学习 Flask(Welcome | Flask (A Pytho ...

  • 数据库表反向生成(二) Django ORM inspectdb

    如果你已经有已知的数据库及表格. 运行下面代码可以自动生成models模型文件 python manage.py inspectdb > your_app_name/models.py 或者py ...

  • Word小技巧:word中怎么在□打√?

    word中怎么在□打√?我们通常会用word来做一些采集的用品情况的文档,类似于学习采集桌椅,或者是公司采集一些资料或是办公用品,这种文档如何制作的让人一眼就能看清,东西有没有采集到了?这个时候我们可 ...

  • 大王小讲--聊聊烘焙中的那些《糖》

    解放一下你的眼睛,这是一个可以听的公众号. 点击下方语音聆听动人声音~ 大家好,我是小编大王 今天给大家分享一个有趣的小故事 <皇后与魔镜> 皇后站在魔镜面前, 问道:"魔镜魔镜 ...

  • 办公小技巧:PPT中动态文字效果巧实现

    在PPT幻灯片中展示标题时,如果将标题文字制成动态效果,就可让幻灯片显得与众不同.将标题文字制作成动态效果,可以使用三种方法:遮罩法.占位符法和填充法,每种方法各具特色. 1. 遮罩法 首先,在幻灯片 ...

  • 路演中的小技巧,数据中的逆转思维

    我有一次花了很长时间帮朋友的公司制作了一份商业计划书还包括融资部分.后来在面临投资人的时候,朋友希望由我来代替他们公司去做陈述路演,我也答应了.从整个商业计划书来看,结构还算合理,在路演过程中,我个人 ...

  • 用这10个小技巧加速Python编程

    重磅干货,第一时间送达 >>> # Positive Indexing... numbers = [1, 2, 3, 4, 5, 6, 7, 8]... print("Fi ...

  • 【Excel实用小技巧】Excel中如何创建条形码和二维码?Excel中如何用手机扫描条形码?

    我们,让Excel变简单 今天我们来介绍Excel中关于条形码和二维码的相关操作技巧. 我们以前就遇到过很多这种需求,主要是两类: 1. 在Excel中批量生成和打印条形码和二维码 2. 扫描商品条形 ...

  • 办公小技巧:Excel中对比突显图表数据

    当我们在Excel中用图表展示数据时,如果需要以突出显示的方式对比展示某些数据,一般需要用到动态图表技术.借助于复选框,我们便可以实现图表中数据的动态突显对比效果(图1). 首先,选择"开发 ...

  • 实用小技巧,Python一秒将全部中文姓名转为拼音!

    有时在处理文件时候,我们需要将中文姓名转换为拼音,或者是转换为拼音首字母,本文将介绍三种Python实现的方法,最后给一个批量操作的代码案例!   一.xpinyin 开门见山,Python中文字转拼 ...

  • UC头条:聊聊python中的list——基本操作

    在学习数据结构的时候,从老师和同学口中得知了python中用于实现线性表的list(列表).在查阅相关资料后,感觉这真是一个有趣又好用的数据结构.于是打算写几篇博客,加深对list原理和使用方法的理解 ...