【问题标题】:Script entered data into the database - should colons be given special treatment脚本将数据输入数据库 - 应该对冒号进行特殊处理
【发布时间】:2017-03-22 05:52:07
【问题描述】:

所以我编写了一个脚本,它基本上从 txt 文件中读取数据并填充此模型。

class modelNursing(models.Model):
    item = models.CharField(max_length=250, default="")

这是一个简单的脚本(看起来像这样)。本质上,txt 文件的每一行都包含一个字符串,此脚本提取每一行字符串并将该字符串作为条目输入到数据库中。

def PopulateNursing(request):
    with open('../content.txt') as fp:
        try:
            for line in fp:
                try:
                    modelNursing.objects.create(item=line)
                except Exception as e:
                    print str(e)
        except Exception as e:
            print str(e)

现在这里是有趣的部分,数据库中的项目modelNursing 实例的项目值等于“Vitals:q4”。所以做这样的事情

nursing = modelNursing.objects.filter(item="Vitals:q4")

应该返回一行,但不幸的是它没有。所以我进入管理界面仔细检查条目是否真的存在,是的,它在那里。 然后我注意到如果我从管理界面中删除字符串Vitals:q4 中的列,然后再次添加并保存,那么查询就可以工作了。关于为什么会发生这种情况的任何建议?自动化脚本是否有可能搞砸了冒号插入或其他东西。为什么我必须删除每个条目中的列并重新插入然后保存。任何意见,将不胜感激。我很困惑。

更新:

实际上我注意到,如果我只是进入管理部分并进入条目实例并简单地再次保存查询工作。再次为什么我必须转到条目实例并再次保存查询才能工作?

【问题讨论】:

    标签: python django python-2.7 django-models


    【解决方案1】:

    您的问题是 line 包含 \n 行尾。所以你的过滤器不是"Vitals:q4",因为这个item没有记录。

    nursing = modelNursing.objects.filter(item="Vitals:q4\n")
    

    所以你应该这样做

    modelNursing.objects.create(item=line.strip())
    

    【讨论】:

    • 啊,这完全有道理。我要试试这个然后回来
    • 是的,这就是问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2013-09-02
    相关资源
    最近更新 更多