Narzędzia użytkownika

Narzędzia witryny


pl:python:importmdb2models

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
pl:python:importmdb2models [2023/12/08 11:58] sindappl:python:importmdb2models [2023/12/12 13:55] (aktualna) – [Przykład importu utworów do modelu Song] sindap
Linia 1: Linia 1:
 ====== Import danych z bazy MS Access ====== ====== Import danych z bazy MS Access ======
 +
 +===== Wstęp =====
  
 Przeniesienie danych z bazy danych Microsoft Access do aplikacji Django może być zrealizowane poprzez kilka kroków. Oto jedna z najczęściej stosowanych metod: Przeniesienie danych z bazy danych Microsoft Access do aplikacji Django może być zrealizowane poprzez kilka kroków. Oto jedna z najczęściej stosowanych metod:
Linia 176: Linia 178:
 Pamiętaj, aby dostosować ścieżki do rzeczywistej struktury katalogów w twoim projekcie Django. Ważne jest również, aby pliki CSV były dostępne w czasie wykonywania skryptu importu. Jeżeli pliki znajdują się w innych katalogach, upewnij się, że podajesz poprawne ścieżki dostępu. Pamiętaj, aby dostosować ścieżki do rzeczywistej struktury katalogów w twoim projekcie Django. Ważne jest również, aby pliki CSV były dostępne w czasie wykonywania skryptu importu. Jeżeli pliki znajdują się w innych katalogach, upewnij się, że podajesz poprawne ścieżki dostępu.
  
 +===== Przykład importu utworów do modelu Song =====
 +
 +Widok modelu do którego importujemy utwory:
 +
 +<code python>
 +from django.db import models
 +from django.utils import timezone
 +from .verbose_names import verbose_names
 +from django.core.validators import MinValueValidator, MaxValueValidator, ValidationError
 +
 +
 +class BaseModel(models.Model):
 +    created_at = models.DateTimeField(default=timezone.now, verbose_name=verbose_names['created_at'], editable=False)
 +    modified_at = models.DateTimeField(auto_now=True, verbose_name='Data ostatniej modyfikacji')
 +
 +    class Meta:
 +        abstract = True
 +
 +
 +class Song(BaseModel):
 +    song_title = models.CharField(max_length=200, verbose_name=verbose_names['song_title'])
 +    release_year = models.PositiveIntegerField(
 +        validators=[MinValueValidator(1000),validate_release_year],verbose_name=verbose_names['release_year'])
 +    duration = models.DurationField(null=True, verbose_name=verbose_names['duration'])
 +
 +    class Meta:
 +        verbose_name = 'Song'
 +        verbose_name_plural = 'Songs'
 +        unique_together = ('song_title', 'release_year')
 +
 +    def __str__(self):
 +        return f"{self.song_title}, ({self.release_year})"
 +</code>
 +
 +Widok struktury przykładowego pliku CSV:
 +
 +<code csv song_data.csv>
 +Utwór;1983;00:02:00
 +Złoty krążek;2003;00:08:22
 +Alibaba;1987;00:01:44
 +Złoty Liść;2004;00:02:00
 +Blada gwiazda;2022;00:08:22
 +Pusta Studnia;1999;00:01:44
 +Złamany patyk;1982;00:02:00
 +Stary Żółw;2004;00:08:22
 +Ślepa Furia;1988;00:01:44
 +Cuchnący hipopotam;2005;00:02:00
 +Blade Jajo;2023;00:08:22
 +Śmierdząca kupa;2000;00:01:44
 +Zryty mózg;1983;00:02:00
 +Maniana;2005;00:08:22
 +Zimny pręt;1989;00:01:44
 +Złamana glizda;2006;00:02:00
 +Zimny piach;2023;00:08:22
 +Blade oko;2001;00:01:44
 +Płonący wiatr;1984;00:02:00
 +Gorące Iglo;2006;00:08:22
 +Delikatny łomot;1990;00:01:44
 +Suche gacie na dnie morza;2007;00:02:00
 +Matowe lustro;2022;00:08:22
 +Głucha cisza;2002;00:01:44
 +Blada czerwień;1985;00:02:00
 +Niski drapacz chmur;2007;00:08:22
 +Słoneczna sztolnia;1991;00:01:44
 +Płytki prysznic;2008;00:02:00
 +Mocna herbata;2020;00:08:22
 +Zielona cytryna;2003;00:01:44
 +Polny czołg;1986;00:02:00
 +</code>
 +
 +Powyższy plik umieszczamy w katalogu django tam gdzie znajduje się plik ''manage.py''.
 +
 +W katalogu naszej aplikacji tworzymy katalogi ''managment/commands'' a w nim plik ''importdata.py''.
 +
 +<code>
 +yourproject/
 +├── yourproject/
 +│   ├── yourapp/
 +│   │   ├── management/
 +│   │   │   └── commands/
 +│   │   │       ├── __init__.py
 +│   │   │       └── importdata.py  # Plik z kodem importu CSV
 +│   │   ├── __init__.py
 +│   │   ├── models.py
 +│   │   └── ...
 +│   ├── yourproject/
 +│   │   ├── __init__.py
 +│   │   ├── settings.py
 +│   │   ├── urls.py
 +│   │   └── ...
 +│   └── manage.py
 +└── venv/
 +</code>
 +
 +Przykładowy widok pliku ''importdata.py''.
 +
 +<code python importdata.py>
 +import csv
 +from django.core.management.base import BaseCommand
 +from dbcdapp.models import Song
 +from datetime import timedelta
 +
 +class Command(BaseCommand):
 +    help = 'Import data from CSV to Django models'
 +
 +    def handle(self, *args, **kwargs):
 +        with open('song_data.csv', newline='', encoding='utf-8') as csvfile:
 +            csv_reader = csv.reader(csvfile, delimiter=';')
 +            for row in csv_reader:
 +                duration_str = row[2]
 +                duration_parts = duration_str.split(':')
 +                duration = timedelta(hours=int(duration_parts[0]), minutes=int(duration_parts[1]),
 +                                     seconds=int(duration_parts[2]))
 +                Song.objects.create(song_title=row[0], release_year=int(row[1]), duration=duration)
 +        self.stdout.write(self.style.SUCCESS('Data imported successfully'))
 +</code>
 +
 +Powyższy kod dzieli ciąg ''00:02:00'' na części (godziny, minuty, sekundy), a następnie tworzy obiekt ''timedelta''. Ten obiekt możesz następnie użyć jako trwanie utworu w twoim modelu.
 +
 +Upewnij się, że kolumna ''duration'' w twoim modelu jest odpowiedniego typu, na przykład ''DurationField''. Jeśli nie masz takiego pola w modelu, możesz je dodać, aby poprawnie przechowywać trwanie utworu.
 +
 +Warto też zauważyć, że plik CSV nie zawiera nagłówka kolumn. Pierwsza linia zawiera dane utworu. Natomiast do pul modelu ''(song_title=row[0], release_year=int(row[1]), duration=duration)'' przypisana jest odpowiednia kolumna pliku CSV licząc w kolejności od ''0''.
 +
 +Trzeba również pamiętać, że ''dbcdapp'' w linii ''from dbcdapp.models import Song'' to nazwa naszej aplikacji. Opcje ''encoding=utf-8'' i ''delimiter=;'' określają w jakim kodowaniu jest plik CSV oraz jakim znakiem są rozdzielone pola kolumn.
pl/python/importmdb2models.1702033096.txt.gz · ostatnio zmienione: 2023/12/08 11:58 przez sindap

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki