对于非空列,Django ORM返回None

时间:2016-05-16 08:57:14

标签: python mysql django django-models

我有以下django模型

class CalculatedResults(models.Model):
 id = models.IntegerField(primary_key=True)
 tmstamp = models.DateTimeField()
 latitude = models.FloatField()
 longitude = models.FloatField()
 magnitude = models.FloatField()
 origin_time = models.DateTimeField()
 actioncode = models.IntegerField(db_column='actionCode', blank=True, null=True) # Field name made lowercase.
 class Meta:
     managed = False
     db_table = 'calculated_results'
     verbose_name = 'Calculated Result'
     verbose_name_plural = 'Calculated Results'

和相关的mysql表是:

CREATE TABLE IF NOT EXISTS `calculated_results` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tmstamp` timestamp(5) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `latitude` double NOT NULL,
  `longitude` double NOT NULL,
  `magnitude` double NOT NULL DEFAULT '0',
  `origin_time` timestamp(5) NOT NULL DEFAULT '0000-00-00 00:00:00.00000',
  `actionCode` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `tmstamp_index` (`tmstamp`),
  KEY `origin_time_index` (`origin_time`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=814 ;

当我尝试使用python manage.py shell使用以下代码从表中检索数据时

form eew_main.models import CalculatedResults
a = CalculatedResults.objects.all().order_by('-id')[:1]

我为Nonetmstamp获得origin_time但是就我调查过的问题而言,以下sql查询被发送到mysql

SELECT  `calculated_results`.`id` ,  `calculated_results`.`tmstamp` ,  `calculated_results`.`latitude` ,  `calculated_results`.`longitude` ,  `calculated_results`.`magnitude` , `calculated_results`.`origin_time` ,  `calculated_results`.`actionCode` 
FROM  `calculated_results` 
ORDER BY  `calculated_results`.`id` DESC 
LIMIT 1

当我使用django使用的相同mysql用户在mysql上尝试时,我获得了所有值。

所以请帮我以某种方式找到调查和解决此问题的方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

好像你的表是在Django之外创建的。 Django的models.DateTimeField将合成到MySQL中的datetime字段而不是timestamp

检查this answer以查找类似于DateTimeField的实现,该实现在SQL级别使用timestamp