#python #django #python-3.x #python-2.7 #django-models
#python #django #python-3.x #python-2.7 #django-модели
Вопрос:
Я новичок в Django и задаюсь вопросом, как вставить данные из файла excel / csv / txt в Postgres с помощью Django. Я смог успешно подключиться к базе данных и создать таблицу, но, может быть, вы, ребята, поможете мне с импортом и экспортом данных с использованием моделей Django
Редактировать:
csv_filepathname= "C:/Users/Desktop/MF.csv"
djang_proj_folder= "C:/Users/"
import sys,os
sys.path.append(djang_proj_folder)
os.environ['DJANGO_SETTINGS_MODULE'] ='cartel_app.settings'
from cartel_app.models import mf
import csv
datareader = csv.reader(open(csv_filepathname), delimiter='|')
for row in datareader:
record_type = row[0]
unique_system_identifier = row[1]
uls_file_number=row[2]
ebf_number=row[3]
call_sign=row[4]
partition_area_idnumeric=row[5]
lower_frequency=row[6]
upper_frequency=row[7]
def_und_indicator=row[8]
defined_partition_area=row[9]
удалось успешно загрузить данные в таблицу, но удалось загрузить только 2 строки, в ней более 1000 строк, что я делаю не так?? Пожалуйста, предложите
Ответ №1:
Было бы полезно, если бы вы опубликовали более подробную информацию, но я думаю, что это не изменит выбранный вами метод. Например, вам нужно импортировать данные книги из csv (используйте native csv reader) / excel (используйте openpyxl), В котором есть такие поля, как title, isbn, page_count и т.д.
Прежде всего, мои рекомендации заключались бы в том, чтобы полагаться на ORM django и создавать модель (Book) с соответствующими полями. Затем просто прочитайте исходный файл и выполните основную работу — вставьте (из соображений эффективности я рекомендую использовать bulk_create):
entries = []
for line in source:
entries.append(Book(title=line['title'], ... etc
Book.objects.bulk_create(entries)
Кроме того, для выгрузки данных на основе модели, пожалуйста, используйте встроенные возможности django:
python manage.py dumpdata AppName.ModelName --format json
и вуаля. Надеюсь, это поможет
Ответ №2:
Это сильно зависит от ваших моделей и от того, как необходимо обработать csv перед сохранением.
Для примера я буду использовать эту модель:
# students/models.py
from django.db import models
class Student(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
grade = models.IntegerField()
def __str__(self):
return f"{self.first_name} {self.last_name} (grade={self.grade})"
Для импорта csv мы можем использовать csv
модуль из stdlib.
# students/data_import.py
import csv
from students.models import Student
def load_csv_file(path):
with open(path) as file_obj:
reader = csv.reader(file_obj)
for row in reader:
Student.objects.create(
first_name=row[0],
last_name=row[1],
grade=int(row[2]),
)
Теперь мы можем протестировать, импортировав правильно отформатированный csv:
# There are no products in the database to start
>>> Student.objects.count()
0
# Here's a csv with some example data:
>>> print(open("students.csv").read())
first_name,last_name,grade
John,Doe,5
Jane,Doe,8
>>> from students.data_import import load_csv_file
>>> load_csv_file("students.csv")
>>> Student.objects.count()
2
>>> Student.objects.values()
[
{"first_name": "John", "last_name": "Doe", "grade": 5},
{"first_name": "Jane", "last_name": "Doe", "grade": 8}
]
Комментарии:
1. Я добавил новый комментарий, не могли бы вы, пожалуйста, проверить и сообщить мне, что я делаю не так
2. я это исправил. Спасибо
3. @BharatGuda не могли бы вы, пожалуйста, объяснить, как вы исправили свою проблему, чтобы будущие посетители этого вопроса поняли проблему и как ее исправить? Как только вы это сделаете, пожалуйста, выберите один из ответов в качестве правильного.
4. приведенный выше код отлично сработал для меня, мне просто нужно было обновить базу данных. потребовалось некоторое время, чтобы загрузить все записи.