2017-06-05 100 views
-3

我已经定制了我的Django项目以与mariaDB(mySQL)一起工作。 工作正常,但我有模型的问题(或担忧)。django - 模型 - 有什么好处?

首先 - 我不确定为什么我需要它们,如果对我个人来说,它更容易使用SQL语句来获取数据。 对于不熟悉SQL的人员,使用API​​进行数据库查询可能会很有用,但对我而言,它不那么灵活。 任何人都可以解释我使用模型的主要好处吗?

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

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. 为什么 - 我定义为FloatField上DB是“双”,而不是“浮动”(我检查这个使用phpMyAdmin)

我如何正确设置默认值?

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

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

+1

这应该起码有四个不同的问题。 – e4c5

+0

它有什么区别吗?如果我们正在谈论事件管理,我明白要严格,但这只是公众论坛上的一个问题。 – rdr

+0

这不是一个论坛。并且这个网站有规则。您应该至少阅读https://stackoverflow.com/help/mcve http://stackoverflow.com/help/how-to-ask在发布 – e4c5

回答

2

问题零,也就是为什么模型:Django的模型在关系数据库表上是一个很好的抽象 - 大多数(如果不是全部的话)web应用程序最终拥有(或正在)某种类型的CRUD,您可以在其中操作对象或图形保存在数据库中的对象,所以面向对象的方法很适合在那里工作。此外,Django(以及与Django一起工作的库)中的许多功能都是围绕模型(如admin,ModelForms,序列化等)构建的。

问题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):)

+0

之前,非常感谢所有解释。这非常有帮助。那些700-800条目是报价(每一条都是开放的,高的,接近的,低的价格和数量的。在大多数情况下,我需要所有这些条件(如果你绘制烛台 - 在我的情况下,将在浏览器上通过javascript完成)。我需要这些数据通过JSON) – rdr

+0

正确。在这种情况下,你可以很容易地做'返回JSONResponse(Quote.objects.filter(东西).values('tdate','ticker','open','vol')) '你会得到'[{“tdate”:...},{...},{...}]'。 – AKX