【问题标题】:Django: Auto Populate CharField using Urllib2Django:使用 Urllib2 自动填充 CharField
【发布时间】:2014-10-11 00:11:20
【问题描述】:

我正在做一个 Djnago 项目,想知道是否可以使用我使用 Urllib2 解析的信息来快速自动填充大量数据的字段。这是我的模型

from django.db import models

class Stocks(models.Model):
    Ticker = models.CharField(max_length=250)
    Name = models.CharField(max_length=250)
    Exchange = models.CharField(max_length=250)
    Industry = models.CharField(max_length=250)
    About = models.TextField()

    class Meta:
        verbose_name_plural = "Stocks"

    def __unicode__(self):
        return self.Ticker

到目前为止,我已经使用 CSV 中的数据来填充字段“Ticker”、“Name”和“Exchange”,就像这样(uisng“python manage.py shell”):

import csv
from stocks.models import Stocks
fields = ["Ticker", "Name", "Exchange"]
for row in csv.reader(open('NASDAQ.csv', 'rU'), dialect='excel'):
    Stocks.objects.create(**dict(zip(fields, row)))

我想知道是否可以像从 urllib2 中提取数据一样自动填充“行业”字段。这是我的相关 urllib2 代码:

indusCode = urllib2.urlopen("http://finance.yahoo.com/q/in?s="+t).read()
industry = indusCode.split('<b>Industry: ')[1].split('</b>')[0]
industry = industry.replace("&amp;", "&") 

有人知道我是否可以使用从 urllib2 中提取的数据来填充“行业”字段吗?谢谢

【问题讨论】:

    标签: python django django-models django-admin urllib2


    【解决方案1】:

    当然。

    import csv
    from stocks.models import Stocks
    fields = ["Ticker", "Name", "Exchange"]
    for row in csv.reader(open('NASDAQ.csv', 'rU'), dialect='excel'):
        row_dict = dict(zip(fields, row))
        indusCode = urllib2.urlopen("http://finance.yahoo.com/q/in?s=" + row_dict['Ticker']).read()
        industry = indusCode.split('<b>Industry: ')[1].split('</b>')[0]
        industry = industry.replace("&amp;", "&") 
        row_dict['Industry'] = industry
        Stocks.objects.create(**row_dict)
    

    尚未测试。但我相信类似的东西应该可以工作。

    【讨论】:

    • 谢谢,这很有魅力。但是,当我运行它时,代码会创建一个新代码并将行业名称添加到新代码中,而不是将其添加到我之前创建的现有代码中。有什么办法可以解决这个问题?
    • 好吧,你正在调用创建。如果代码已经作为Stocks 对象存在,那么您首先需要获取该对象,然后只需更新值。像if Stocks.objects.filter(Ticker=row_dict['Ticker']).exists(): 这样的东西然后你创建一个引用对象并以这种方式分配值。如果 if 失败,那么您可以将之前发布的所有代码放入 else: 块中。奖励,对于已经存在的 Stock 对象,您不需要更新行业。
    • 好的,我已经对我的代码进行了一些编辑,但是当我运行它时似乎没有发生任何事情。你可以看到我的代码here
    • 这应该作为另一个问题发布。但是,您必须先获取对象,然后才能对其进行更改。 Example pastebin
    猜你喜欢
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多