Python Django Импорт данных в Postgres - PullRequest
0 голосов
/ 14 марта 2019

Я новичок в Django, и мне интересно, как вставить данные из файла excel / csv / txt в Postgres с помощью Django. Мне удалось успешно подключиться к базе данных и создать таблицу, но вы, ребята, помогите мне с тем, как импортировать и экспортировать данные с использованием моделей Django

Edit:

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 строк, где я делаю неправильно? Пожалуйста, предложите

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Это сильно зависит от ваших моделей и от того, как 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}
]
0 голосов
/ 14 марта 2019

Было бы полезно, если вы опубликуете некоторые подробности, но я думаю, что это не изменит ваш метод. Например, вам необходимо импортировать данные Book из 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

и вуаля. Надеюсь, это поможет

...