чтение из CSV-файла для цикла и вставки в базу данных MySQL - PullRequest
0 голосов
/ 04 июня 2019

Я работаю в системе, которая может отправлять персонализированные сообщения клиентам. У меня есть файл с контактами и именем. Я хочу загрузить файл, а затем прочитать файлы. Перед вставкой в ​​базу данных я хочу добавить в нее сообщение из текстового поля в HTML-шаблонах. Например, я скажу: Уважаемый [имя], Спасибо вам. Он будет зацикливаться на файле Excel и вставлять в базу данных контакт и сообщение, которое было сгенерировано, как Уважаемый Рональд, Спасибо.

Мне удалось добавить, чтобы загрузить файл Excel и вставить контакты в таблицы базы данных. Но я не смог бы соединиться с сообщением texttbox

Views.py
 def upload(request):
    template = 'sms/upload.html'
    prompt = {'order':'order of the CSV should be'}
    context = {}
    list1 =[]

    if request.method =="GET":
        return render(request, template, prompt)
    csv_file = request.FILES['file']
    if not csv_file.name.endswith('.csv'):
        messages.error(request,'This is not a csv file')
    data_set = csv_file.read().decode('UTF-8')
    io_string = io.StringIO(data_set)
    # row = csv.reader(io_string, delimiter=',', quotechar="|")
    # next(io_string)

    for column in csv.reader(io_string, delimiter=',', 
quotechar="|"):
        s = ''.join(column[0].split())
        p=f"{254}{s[-9:]}"

        _, created = Contact.objects.update_or_create(
            phone_numbers = p,
            first_name=column[1],
            last_name=column[2],
            email=column[3],
            author=request.user



        )

    context = {}
    # context1 = {list1}
    # print (context1)
    # print(column)


    return render(request, template, context)

#upload.html

 {% extends 'sms/base.html'%}

 {% block content%}




 {% if messages %}
   {% for message in messages %}

     <div class="">

      <strong>{{message|safe}}</strong>


     </div>

   {% endfor %}

 {%else%}
 <!-- {{order}} -->
 <form  method="post" enctype="multipart/form-data">
   {% csrf_token %}
   <!-- <label>Upload file</label> -->
   <input type="file" name="file">
  <p>Only accepts CSV file</p>
  <button type="submit">Upload</button>


</form>



 {% endif %}




<div class="col-sm-10">
  <h4>Send  message </h4>
  <div class="col-md-12">
   <form class="form-group" action="" method="POST">
   {% csrf_token %}

    Message: <br/>
    <textarea name="text_message" id="phone" class="form-control" 
 cols="14" rows="6" placeholder="Type your message here"> 

  <br/>


<br>
<input class="btn btn-secondary" type="submit" value="Send Now"/>
</form>

{% endblock content%}

Я хочу сохранить сохраненные поля как переменные и перейти к шаблону upload.html, затем обработать, чтобы вставить сообщение в базу данных

1 Ответ

0 голосов
/ 04 июня 2019

Для вставки данных, сначала вы должны прочитать их правильно.Если вы читаете данные CSV в списке словарей, то [{'name':'abc','contact':123},{'name':'xyz', 'contact':456}] итерация будет легкой.Pandas - лучшая библиотека для игры с данными.Вы можете использовать этот код, чтобы взять список словарей

get_file = request.FILES['files']
df = pd.read_csv(get_file)
df = df.where((pd.notnull(df)), '')
    row = df.shape[0]
    col = df.shape[1]
    lista = [] 
    for r in range(row):
        aDict = {} 
        for c in range(col):
            v = df.iat[r,c]
            k = df.columns[c]
            aDict[k]=v
        lista.append(aDict)

Здесь lista возвращает список словаря. Каждый словарь в списке представляет строку (csv, excel).Затем вы можете легко сохранить эти данные в БД по имени столбца lis['name'] После того, как вы сможете передать свой контекст.

Примечание: Вам необходимо установить панды по

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