使用Django web应用将CSV文件导入MySQL数据库

2 投票
4 回答
5101 浏览
提问于 2025-04-15 13:59

谢谢大家。我成功完成了这个任务。再次非常感谢,特别是DAVID、WM-EDDIE和S.LOTT,还有STACKOVERFLOW。

解决方案:

                **model = Contact()
                model.contact_owner = request.user
                model.contact_name = row[1]
                model.contact_mobile_no = row[2]
                model.select_group = row[3]
                model.save()** 

我的user.py文件

def import_contact(request):
 if request.method == 'POST':
    form = UploadContactForm(request.POST, request.FILES)
    if form.is_valid():
            csvfile = request.FILES['file']
            print csvfile

            csvfile.read()
                testReader = csv.reader(csvfile,delimiter=' ', quotechar='|')

            **#what code should i write here to store data in mysql**


            for row in testReader:
                    print "|".join(row)
    return HttpResponseRedirect('/admin')


else:
    form = UploadContactForm()

vars = RequestContext(request, { 'form': form })
return render_to_response('admin/import_contact.html', vars)

CSV文件中的数据:

abubakar,rooney,0178222123,student

abubakar,ronaldo,0183886789,student

abubakar,kaka,0197887898,bola

非常感谢任何建议。希望能给我一些代码示例,因为我在这个语言上还是个初学者。

我的models.py文件:

class Contact(models.Model):

contact_owner = models.ForeignKey(User, related_name="contacts")
contact_name = models.CharField(max_length=20)
contact_mobile_no = models.CharField(max_length=20)
select_group = models.CharField(max_length=20, null=True)

def __unicode__(self):
   return "contact {contact_owner=%s, contact_name=%s, contact_mobile_no=%s, select_group=%s}" % (self.contact_owner, self.contact_name, self.contact_mobile_no, self.select_group)

4 个回答

0

这大概就是我们所做的事情。

header = 'contact_owner', 'contact_name', 'contact_mobile_number', 'select_group'
rdr= csv.reader(request.FILES['file'])
for row in rdr:
    data = zip( header, row )
    owner, created = User.get_or_create( data['contact_owner']
    data['contact_owner']= owner
    contact, created = Contact.get_or_create( **data )
    logger.info( "Created %r", contact )

http://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs

你问的问题提到“用逗号分隔”。你的示例数据是用逗号分开的。但是你的 csv.reader 代码却显示是用空格。到底是用哪个呢?

0

Python的手册写得不太好。你需要自己推测,因为它们使用了string.join(),所以row就像一个列表一样。简单来说,它把CSV文件解析成一个列表的列表。它会帮你处理那些麻烦的引号和转义字符。

你可以像使用数组或列表一样使用它。

for row in testReader:
    model = YourModel()
    model.property_a = row[0]
    model.property_b = row[1]
    model.save()

还有一个DictReader,它让你可以写得更清晰易懂:

for row in testReader:
    model = YourModel()
    model.property_a = row["prop_a"]
    model.property_b = row["prop_b"]
    model.save()
0

要把一个用逗号分隔的字符串切分成小块:

>>> a = 'abubakar,rooney,0178222123,student abubakar,rooneyzzz,0178222164'
>>> b = a.split(',')
>>> print b
['abubakar', 'rooney', '0178222123', 'student abubakar', 'rooneyzzz', '0178222164']

可以参考@wm_eddie的回答,了解如何在你的数据库里创建一个新的条目。

撰写回答