импортировать CSV-файл в базу данных MySQL с помощью веб-приложения Django - PullRequest
2 голосов
/ 01 сентября 2009

спасибо, парни. Мне удалось завершить его. Миллион спасибо еще раз специально для DAVID, WM-EDDIE и S.LOTT.also 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()** 

мой пользователь.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, студент

Абубакар,kaka, 0197887898, bola

оценил любое предложение и, надеюсь, может показать мне пример кода, потому что я все еще новичок в этом языке

my 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 голосов
/ 06 июня 2018
 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.

0 голосов
/ 01 сентября 2009

Руководства по 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()
0 голосов
/ 01 сентября 2009

Это примерно то, что мы делаем.

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 голосов
/ 01 сентября 2009

Чтобы токенизировать строку через запятую:

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

См. Ответ @ wm_eddie о том, как создать новую запись в вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...