Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用django web应用程序将csv文件导入mysql数据库_Python_Django - Fatal编程技术网

Python 使用django web应用程序将csv文件导入mysql数据库

Python 使用django web应用程序将csv文件导入mysql数据库,python,django,Python,Django,谢谢各位。我终于完成了。再次特别感谢大卫、WM-EDDIE和S.LOTT。也谢谢你们 解决方案: **model = Contact() model.contact_owner = request.user model.contact_name = row[1] model.contact_mobile_no = row[2] model

谢谢各位。我终于完成了。再次特别感谢大卫、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()** 
my 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,博拉

非常感谢您的建议。希望您能给我展示一些编码示例,因为我还是这门语言的初学者

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)

要标记逗号分隔字符串,请执行以下操作:

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

请参阅@wm_eddie的答案,了解如何在数据库中创建新条目。

要标记逗号分隔的字符串:

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

请参阅@wm_eddie的答案,了解如何在数据库中创建新条目。

Python的手册非常糟糕。您“应该”推断,因为他们使用字符串.join(),所以该行的工作方式类似于列表。因此,它将CSV文件解析为一个列表列表。它会帮你处理所有令人讨厌的引述和逃避

使用它就像使用数组/列表一样

for row in testReader:
    model = YourModel()
    model.property_a = row[0]
    model.property_b = row[1]
    model.save()
还有一个听写器,可以让你写一个更可读的:

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

Python的手册非常糟糕。您“应该”推断,因为他们使用字符串.join(),所以该行的工作方式类似于列表。因此,它将CSV文件解析为一个列表列表。它会帮你处理所有令人讨厌的引述和逃避

使用它就像使用数组/列表一样

for row in testReader:
    model = YourModel()
    model.property_a = row[0]
    model.property_b = row[1]
    model.save()
还有一个听写器,可以让你写一个更可读的:

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 )


您的问题是“逗号标记器”。您的示例数据使用逗号。但是您的
csv.reader
代码显示空格。是哪一个

这大概就是我们所做的

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 )
 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

您的问题是“逗号标记器”。您的示例数据使用逗号。但是您的
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


在我的示例中,模型学生有三个属性:first_name、last_name和middle_name。

在不知道数据库模型的情况下,很难知道如何将这些数据添加到数据库中。你的models.py是什么样子的?david,我对csv文件做了一些小的编辑,想在mysql.abubakar中的列所有者名称下存储,在rooney中的列名称下存储,在mobile中的数字等等。我之前也丢失了你的答案,所以请你再写一次。很抱歉,你的csvreader设置错误。您的csv文件是逗号分隔的,而不是空格分隔的。另外,我非常确定您没有使用|作为引号字符,因此请确保csvreader不包含分隔符和引号参数。jusr一个常规的csv.reader(csvfile)应该可以工作。您可能还需要选择\u group=models.CharField(max\u length=20,null=True,blank=True)在不知道数据库模型的情况下,很难知道如何将这些数据添加到数据库中。你的models.py是什么样子的?david,我对csv文件做了一些小的编辑,想在mysql.abubakar中的列所有者名称下存储,在rooney中的列名称下存储,在mobile中的数字等等。我之前也丢失了你的答案,所以请你再写一次。很抱歉,你的csvreader设置错误。您的csv文件是逗号分隔的,而不是空格分隔的。另外,我非常确定您没有使用|作为引号字符,因此请确保csvreader不包含分隔符和引号参数。jusr一个常规的csv.reader(csvfile)应该可以工作。您可能还希望选择select_group=models.CharField(max_length=20,null=True,blank=True)“推断”?我不这么认为。上面写着“将阅读器的iterable对象的下一行作为列表返回”,这在我看来很清楚。文档确实说得很清楚,但“.join(row)”是他们说明它是列表的方式。如果你问我,这是一个很糟糕的例子,“推断”?我不这么认为。上面写着“将阅读器的iterable对象的下一行作为列表返回”,这在我看来很清楚。文档确实说得很清楚,但“.join(row)”是他们说明它是列表的方式。如果你问我的话,这是一个非常糟糕的例子。在单元格中有逗号之前,在“,”上拆分才有效。这就是为什么有csv模块。它应该正确处理“引号”中的逗号,并正确转义引号字符。在你必须自己制作一个csv模块之前,你真的不知道在标准库中有一个csv模块有多棒。david,a='abubakar,rooney,0178222123,student abubakar,Rooneyzz,0178222164'你已经声明了。我想在上传文件时如何从文件中确定'a'。例如a=csv.reader(csvfile)或什么,若要自动读取“abubakar,rooney,0178222123,学生abubakar,Rooneyzz,0178222164”,仅当单元格中有逗号时,才能使用“拆分打开”。这就是为什么有csv模块。它应该正确处理“引号”中的逗号,并正确转义引号字符。在你必须自己制作一个csv模块之前,你真的不知道在标准库中有一个csv模块有多棒。david,a='abubakar,rooney,0178222123,student abubakar,Rooneyzz,0178222164'你已经声明了。我想在上传文件时如何从文件中确定'a'。例如a=csv.reader(csvfile)或什么,自动读取“阿布巴卡尔,鲁尼,0178222123,学生阿布巴卡尔,鲁尼兹,0178222164”