我已经定制了我的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)
为什么程序在创建数据库表和字段时不考虑“默认”?
为什么 - 我在DB上定义为FloatField是'double'而不是'float'(我使用phpMYAdmin检查了这个)
如何正确设置默认值?
我的桌子将至少有100万条目。 我是否需要关注使用API而不是直接SQL查询的性能?通常一个查询将选择700-800个条目。 是使用MySQLdb和直接使用SQL而不是模型的好方法吗?
抱歉,有些问题可能听起来太简单了,但我刚开始使用Django。在此之前,我使用PHP。我想用Python进行网页开发的主要原因是我开发的库。答案 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:
MySQLdb
一样。哦,还有一件事:你的模型名称应该是单数的(Quote
):)