django - 模型 - 有什么好处?

时间:2017-06-05 10:04:55

标签: python django

我已经定制了我的Django项目来使用mariaDB(mySQL)。 工作正常,但我对模型有问题(或关注)。

首先 - 我不确定为什么我需要它们,如果对我(个人而言)更容易使用SQL语句来获取数据。 使用API​​进行数据库查询可能对不熟悉SQL的人有用,但对我来说灵活性较低。 有人能解释一下使用模型的主要好处吗?

这是我遇到的问题之一。请参阅下面的代码。

class Quotes(models.Model):
    updated = models.DateTimeField()
    tdate = models.DateField(default='1900-01-01')
    ticker = models.CharField(max_length=15)
    open = models.FloatField(default=0)
    vol = models.BigIntegerField(default=0)
  1. 为什么程序在创建数据库表和字段时不考虑“默认”?

  2. 为什么 - 我在DB上定义为FloatField是'double'而不是'float'(我使用phpMYAdmin检查了这个)

  3. 如何正确设置默认值?

    我的桌子将至少有100万条目。 我是否需要关注使用API​​而不是直接SQL查询的性能?通常一个查询将选择700-800个条目。 是使用MySQLdb和直接使用SQL而不是模型的好方法吗?

    抱歉,有些问题可能听起来太简单了,但我刚开始使用Django。在此之前,我使用PHP。我想用Python进行网页开发的主要原因是我开发的库。

1 个答案:

答案 0 :(得分:2)

问题为零,即为什么模型:Django的模型在关系数据库表之上是一个很好的抽象 - 大多数(如果不是全部)Web应用程序最终拥有(或正在)某种操作对象的CRUD或者保存在数据库中的对象图,因此面向对象的方法很适合在那里工作。

此外,Django中的许多功能(以及与Django一起使用的库)都是围绕模型构建的(例如admin,ModelForms,serialization等)。

问题1:该日期最好应为datetime.date(1900, 1, 1),而不是字符串,但除此之外,Django处理模型实例化的默认值,不一定在数据库中。

问题2:因为that's how it's mapped,大概是为了避免程序员意外地失去浮点精度(因为MySQL在做精确丢失转换时非常臭名昭着"在你的背后")。

问题3:绝对诚实,Django的ORM在生成查询和实例化模型实例时并不是最快的。大多数情况下,在常规操作中,这不是问题。根据您在700到800个实例中的操作,您或许可以解决这个问题;例如,如果您不需要实际实例,只需要在查询集上使用.values().values_list(),只需要数据。

关于直接SQL,不要在Django应用中对任何MySQLdb次调用进行硬编码; Django有很好的逃脱舱口"做原始SQL:

哦,还有一件事:你的模型名称应该是单数的(Quote):)