写这个之前,其实这个反向映射在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
}
}
据数据库表反向生成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()