Python3的Django利用Mysql中已经手动建好数据库中的表反向生成对应的Model映射代码

20 篇文章 0 订阅
7 篇文章 0 订阅

写这个之前,其实这个反向映射在Java上,是对应于Mybatis的genarate工具自动生成mapping.xml的。因我常开发Java项目,所以转到Django后我觉得Python也应该有这样的工具才能配到上Django十几年的发展才对。

假设mysql数据库 中 django数据库存在 battery_status_data表

(pip install mysqlclient)要把它变为Django ORM Model.py

 表结构

 

django mysql数据库配置 --> settings.py 文件中找到 DATABASES 配置项

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django', # database name
        'USER': 'root',
        'PASSWORD': 'password',###input you pwd
    }
}

2e37743325237efbe252c29ecd6efb8a.png

 

据数据库表反向生成Model的命令(全部)

# cmd  ---> conda info -e  ---> activate SMT_AOI
# F: ---> cd dj_mysql_web(Django 项目root目录下) 

# 使用这条命令,会根据设置的数据库中的表在自动生成对应的Model代码,并打印出来
python3 manage.py inspectdb  

#当然也可以直接将打印的代码直接导入到指定的Model文件中
python3 manage.py inspectdb > my_mysql_web_app/models.py 
# 前提是创建了app(my_mysql_web_app)并且在setting.py文件中注册过

#将指定的表生成对应的Model
python3 manage.py inspectdb --database default stu
python3 manage.py inspectdb --database default stu > my_mysql_web_app/models.py
python3 manage.py inspectdb stu > my_mysql_web_app/models.py

常用的是

python3 manage.py inspectdb  

然后输出结果:

 然后复制到Model.py如图

 这里id不用输入了,Python对于数据库的表每次都会自动生成带有自增的主键id,所以这是默认的

附上一些数据库操作的代码:

# -*- coding:utf-8 -*-
from my_mysql_web_app.models import xxxx #xxxx就是你的数据库的表名,就是在model.py中你的表的class名字

# filename db_utils.py

def insert_op():
    test1 = xxxx(sid='S_1016', sname="cccc", age=28)
    test1.save()


def query_op():

    # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
    list = xxxx.objects.all()

    # filter相当于SQL中的WHERE,可设置条件过滤结果
    res = xxxx.objects.filter(id=1)
    #print(res)

    # 获取单个对象
    res2 = xxxx.objects.get(id=1)
    print(res2.id, res2.sname, res2.age, res2.gender)

    # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
    res3 = xxxx.objects.order_by('name')[0:2]
    #print(res3)

    res4 = xxxx.objects.order_by("id") # 数据排序
    #print(res4)

    # 上面的方法可以连锁使用
    #res5 = xxxx.objects.filter(name="runoob").order_by("id")


def save_op():
    # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
    test1 = xxxx.objects.get(id=1)
    test1.sname = 'Google'
    test1.save()

    # 另外一种方式
    # Test.objects.filter(id=1).update(sname='Google')



def delete_op():
    # 删除id=1的数据
    test1 = xxxx.objects.get(id=1)
    test1.delete()

    # 另外一种方式
    # Test.objects.filter(id=1).delete()

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值