请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在Django可以直接访问原有mysql的情况下,是否可以不写models.py的内容?

如果本身已有数据库在navicat中建立好了,也已经成功完成了django与数据库链接。然后发现通过django对mysql执行原生sql的增删改查时,有一种方式是通过django.db的connection来执行。这种方式可以允许django的models都不需要导入views文件中,而通过settings.py文件制定好的数据库,直接访问数据库。

这种方法似乎不需要经过django的models.py文件中的内容,那么请问老师,如果写好了app中的views文件,即定义post,get等这种前端的请求方法以及对应的处理逻辑关系,是否不写models里的内容也可以呢?这种做法会不会影响开发文档的内容呢?

正在回答

1回答

你这里是想直接使用django的mysql连接而不是使用orm功能吧,可以这样使用,不过代码维护工作比较麻烦, django的model提供了命令可以直接将已有的数据库转换为model的代码的

0 回复 有任何疑惑可以回复我~
  • 提问者 慕虎8173418 #1
    将数据库直接转成django的model的方式也试过了,只是发现在执行数据库增删改查的时候,如果使用的是django.db中的connection的方式的话,似乎不用from APP.models import models_name来进行操作。那请问转与不转有什么区别嘛?
    回复 有任何疑惑可以回复我~ 2022-10-08 11:15:56
  • bobby 回复 提问者 慕虎8173418 #2
    你如果直接使用connection进行操作的话,也可以不用model, model的好处主要是: 1. 映射表名, 2. 字段映射成class 3. 一些其他的辅助,比如自动填充时间,自动报错后的hook逻辑等,如果这些你全都不要 就不用使用model的映射功能了,直接使用connection自己去做字段映射也可以
    回复 有任何疑惑可以回复我~ 2022-10-10 16:42:56
  • 提问者 慕虎8173418 回复 bobby #3
    最近看到了drf的serializer部分,发现依旧需要与models的内容绑定在一起。drf的确很方便,但是如果站在数据库的角度来看的化,日常的增删改查都用django来实现,而不是使用sql的原生语言的话,那数据库的优势,例如索引(对于数据库比较大时查询时间会有指数性的提升)是否就无法用了。
    举个例子:
    在django中实现查询:
        goods = Goods.objects.filters("goods_name"=reqeust.data.goods_name)
    而如果是用sql原生的查询,此处的query_to_dict只是转字典的一个自定义function:
        goods = query_to_dict("select * from t_goods where goods_name=%s",[request.data.goods_name, ])
    如果说数据表t_goods里有将goods_name定义为一个索引,那么上述django在执行查询时,也会走这个索引吗?
    回复 有任何疑惑可以回复我~ 2022-10-11 13:55:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信