UNC BACS 350

Web Apps with Python/Django

Logo

Lesson 31 - Import/Export

LEARN

Course Content

Today

Design Patterns

Reusable Design Patterns

Export Design Pattern

Writing CSV File

table/table.py

```python from csv import writer

def write_csv_file(path, table): with open(path, 'w', newline='') as f: writer(f).writerows(table) ```

Data Model Export Method

book/models.py

```python class Chapter(models.Model): book = models.ForeignKey(Book, on_delete=models.CASCADE, editable=False) order = models.IntegerField() title = models.CharField(max_length=200)

def export_record(self):
    return [self.order, self.title]

```

Exporting Objects

book/book.py

python def export_chapters(book): model = Chapter chapters = f'{book.doc_path}/chapters.csv' records = [o.export_record() for o in model.objects.filter(book=book.title)] write_csv_file(chapters, records)

Import Design Pattern

Reading a Table

table/table.py

```python from csv import reader

def read_csv_file(path): with open(path) as f: return [row for row in reader(f)] ```

Data Model Import Method

book/models.py

```python class Chapter(models.Model): book = models.ForeignKey(Book, on_delete=models.CASCADE, editable=False) order = models.IntegerField() title = models.CharField(max_length=200)

@staticmethod
def import_record(book, values):
    c = Chapter.objects.get_or_create(book=book, order=values[0])[0]
    c.title = values[1]
    c.document = values[2]
    c.save()

```

Importing Objects

book/book.py

python def import_chapters(book): model = Chapter chapters = f'{book.doc_path}/chapters.csv' for row in read_csv_file(chapters): model.import_record(book, row)

Tests

book/tests_book.py

```python class BookDataTest(TestCase):

def test_import_poems(self):
    import_poems_book()
    self.assertEqual(len(Author.objects.all()), 1)
    self.assertEqual(len(Book.objects.all()), 1)
    self.assertEqual(len(Chapter.objects.all()), 56)

```

BUILD

Demo Code

Final Project