![](/img/trans.png)
[英]import csv file into mysql database using django web application
[英]import csv file into mysql database using django web application
感謝伙計們。我設法完成了它。再次感謝DAVID,WM-EDDIE和S.LOTT。
解決方案:
**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文件中的數據:
阿布巴卡,魯尼,0178222123,學生
阿布巴卡,羅納爾多,0183886789,學生
阿布巴卡,卡卡,0197887898,博拉
感謝任何建議。希望能給我展示一些編碼示例,因為我仍然是該語言的初學者
我的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)
標記逗號分隔的字符串:
>>> a = 'abubakar,rooney,0178222123,student abubakar,rooneyzzz,0178222164'
>>> b = a.split(',')
>>> print b
['abubakar', 'rooney', '0178222123', 'student abubakar', 'rooneyzzz', '0178222164']
有關如何在數據庫中創建新條目的信息,請參見@wm_eddie的答案。
Python的手冊非常糟糕。 您“應該”推斷,因為它們使用string.join(),所以行的工作方式類似於列表。 因此,它幾乎將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()
這大約是我們所做的。
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
代碼顯示空格。 哪有
with open(path) as f:
reader = csv.reader(f)
for row in reader:
_, created = Student.objects.get_or_create(
first_name=row[0],
last_name=row[1],
middle_name=row[2],
)
# creates a tuple of the new object or
# current object and a boolean of if it was created
在我的示例中,模型學生具有三個屬性first_name,last_name和middle_name。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.