【问题标题】:Django 1.10 Legacy Database - Unable to Retrieve ObjectsDjango 1.10 Legacy Database - 无法检索对象
【发布时间】:2019-01-16 13:19:54
【问题描述】:

我有一个非常小的(到目前为止)遗留数据库,我使用 Django 在 Django 中自动生成它

python manage.py inspectdb > models.py

我把它放在包含应用程序的 python 包中,并添加到我的INSTALLED_APPS 设置中。

我跑了:python manage.py makemigrations app_name

“app_name”的迁移: app_name/migrations/0002_auto_20180809_0453.py

下一个:python manage.py migrate app_name

要执行的操作: 应用所有迁移:app_name 运行迁移: 正在应用 app_name.0001_initial... OK 正在应用 app_name.0002_auto_20180809_0453... 好的

我检查了模型是使用:python manage.py sqlmigrate app_name 0001 创建的,这表明创建了多个模型。

我的models.py 文件如下所示:

from __future__ import unicode_literals

from django.db import models


class Test(models.Model):
    date = models.FloatField(blank=True, null=True)
    shift = models.FloatField(blank=True, null=True)
    timer = models.FloatField(blank=True, null=True)
    target_produce = models.FloatField(blank=True, 
null=True)
    actual_produce = models.FloatField(blank=True, 
null=True)
    oee = models.FloatField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Test'

我正在尝试从views.py 访问我的数据库。这是我的代码:

File: views.py                              

from __future__ import unicode_literals

from django.shortcuts import render
from django.http import HttpResponse

from lineoee.models import Test

# Create your views here.
def index(request):
        context = {}

        lines = Test.objects.date() # <-- Error here
        print(lines)
        return render(request, 
       'lineoee/index.html',context)

我得到属性错误

“经理”对象没有属性“日期”

我尝试实施解决方案 here 并添加了 UserManager 导入和 objects = UserManager() 但我最终得到了

'Usermanager' 对象没有属性'date'

关于如何消除此错误并正确访问旧数据库中的数据的任何建议?

【问题讨论】:

    标签: python django database sqlite


    【解决方案1】:

    你需要这样做,

    Test.objects.all().values('date')
    

    如果需要打印相应的数据,

    for i in Test.objects.all().values('date'):
        print i['date']
    

    for i in Test.objects.all().values_list('date', flat=True):
        print i
    

    【讨论】:

    • 感谢您的指点。那么下面的打印语句应该反过来输出相应的数据吗?
    • 谢谢,这解决了我的错误。我如何访问特定的“日期”值,因为各种方法和下面的答案仍然会导致错误。谢谢!
    • 当我按照您的建议打印所有日期时,我没有收到任何错误,但是当我尝试仅打印最近的日期时,我收到上述没有属性错误。这一定是我查询的方式。这会导致错误:lines[0].date
    • @fcp 你能发布你试图执行的完整查询吗?
    • 我正在尝试 last_oee = Test.objects.latest('oee') 错误:no such column: Test.id
    【解决方案2】:

    “对象”对象不是数据本身。正如 Django 告诉你的,它是一个允许你访问数据的管理器。为了从中获取数据,您应该使用它的一种方法:get() 用于单个数据条目,all() 或 filter() 或 exclude() 用于条目列表。例如

    lines = Lineoee1.objects.all()   # retrieves all data from Lineoee1 model
    lines[0].date                    # retrieves date field from the first entry
    

    或者,如果您只想获取日期,请尝试使用 values_list() 方法和字段名称列表:

    dates = Lineoee1.objects.values_list('id', 'date')
    

    添加了“id”作为额外字段,以标识日期属于哪个条目 - 您可以将其删除或替换为您拥有的任何主键。

    更多信息请咨询django docs

    【讨论】:

    • 当我运行 dates = Lineoee1.objects.values_list('id', 'date') 时仍然出现错误:no such column: LineOEE1.id
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 2017-09-12
    • 2017-06-14
    • 2013-04-22
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多