Jak dodać dane w formacie JSON do bazy danych?

Jak dodać dane w formacie JSON do bazy danych?
O1
  • Rejestracja:prawie 3 lata
  • Ostatnio:9 dni
  • Postów:40
0

Witam jestem na początku poznawania django i mam pytanie jak umieścić dane (plik json) w bazie? Baza jest podstawowa sqlite3
w class Auto
w warosci Auto.dane_json = i tu właśnie plik json.

jest to models.py

Kopiuj
from django.db import models
import json

class Auto(models.Model):
    marka=models.CharField(max_length=100)
    model_auta=models.CharField(max_length=100,default='model')
    opis=models.TextField()
    data_produkcji=models.DateTimeField()
    dane_json=???????

plik json naprzykład przykład.json

Kopiuj
[{
	"title": "edc16c34_psa",
	"EDC16C34" : [ 69, 68, 67,49,54,67 ]


},
{	"title" :"nr_soft",
	"SOFT_NR": [ 49, 48, 51 ,55]
},
{	"title": "tablica_dtc_1" ,
	"dlugosc" : 2000,
	"idx_dtc_1" : [5,51,5,50,0,0,0,0,0,0,0,0],
	"idx_switch_1" : [5,0,22,33]
}]

Gdzie umjesicić plik przykład.json aby go powiązać z class ?

edytowany 1x, ostatnio: Riddle
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
0

Chodzi o JSONObject?

Kopiuj
class Auto(models.Model):
    # ...
    dane_json=models.JSONObject()
O1
  • Rejestracja:prawie 3 lata
  • Ostatnio:9 dni
  • Postów:40
0

Próbuję zrozumieć umieszczenie danych w bazach danych na serwerach.
Chcę umieścić plik json w bazie na serwerze a potem go pobierać .
Pomysł ż modelem narazię trenuje .

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
0
ogrod123 napisał(a):

Próbuję zrozumieć umieszczenie danych w bazach danych na serwerach.
Chcę umieścić plik json w bazie na serwerze a potem go pobierać .
Pomysł ż modelem narazię trenuje .

Nie za bardzo da się umieścić plik w bazie danych. Najwyżej możesz umieścić treść pliku, np tak.

Kopiuj
from django.db import models

class Auto(models.Model):
    marka=models.CharField(max_length=100)
    opis=models.TextField()
    dane_json=models.JSONObject()

content = """[{
        "title": "edc16c34_psa",
        "EDC16C34" : [ 69, 68, 67,49,54,67 ]
    },
    {	"title" :"nr_soft",
        "SOFT_NR": [ 49, 48, 51 ,55]
    },
    {	"title": "tablica_dtc_1" ,
        "dlugosc" : 2000,
        "idx_dtc_1" : [5,51,5,50,0,0,0,0,0,0,0,0],
        "idx_switch_1" : [5,0,22,33]
    }]"""

Auto.objects.create(
  marka="Ford",
  opis="My card",
  dane_json=content)
O1
  • Rejestracja:prawie 3 lata
  • Ostatnio:9 dni
  • Postów:40
0
Riddle napisał(a):

Chodzi o JSONObject?

Kopiuj
class Auto(models.Model):
    # ...
    dane_json=models.JSONObject()

a ja nie mam models.JSONObject() tylko models.JSONField??

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
0
ogrod123 napisał(a):
Riddle napisał(a):

Chodzi o JSONObject?

Kopiuj
class Auto(models.Model):
    # ...
    dane_json=models.JSONObject()

a ja nie mam models.JSONObject() tylko models.JSONField??

Przepraszam, pamięć zawodzi 😄 Oczywiście chodzi o JSONField. Pomieszało mi się z JSONObject z javy.

edytowany 1x, ostatnio: Riddle
O1
  • Rejestracja:prawie 3 lata
  • Ostatnio:9 dni
  • Postów:40
0

Bardzo ci dziękuje za odpowiedz .
Zaraz to przetestuje

O1
  • Rejestracja:prawie 3 lata
  • Ostatnio:9 dni
  • Postów:40
0

a tak może że każdy atrybut klasy zrobić klucz : wartosć

Kopiuj
class Auto(models.Model):
    title=models.???? /zapisujemy wartośc na przykład "edc16c34_psa"
    EDC16C34 = models.???? / i jak to zapisać Lista dziesietna ??? [ 69, 68, 67,49,54,67 ]

I w tedy bym mógł z panelu admina zarządzac tym
tylko jak zapsać tą tablice jako atrybut

Kopiuj
EDC16C34 = models.???? / i jak to zapisać Lista dziesietna ??? [ 69, 68, 67,49,54,67 ]

jak bym przeżucił dane do strony

Kopiuj
Auto.object.EDC16C34  i bym mjał zmienna jako lista ( [ 69, 68, 67,49,54,67 ]
edytowany 1x, ostatnio: Riddle
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Koszalin
  • Postów:10094
0
ogrod123 napisał(a):

a tak może że każdy atrybut klasy zrobić klucz : wartosć

Kopiuj
    title=models.???? /zapisujemy wartośc na przykład "edc16c34_psa"
    EDC16C34 = models.???? / i jak to zapisać Lista dziesietna ??? [ 69, 68, 67,49,54,67 ]

I w tedy bym mógł z panelu admina zarządzac tym
tylko jak zapsać tą tablice jako atrybut
EDC16C34 = models.???? / i jak to zapisać Lista dziesietna ??? [ 69, 68, 67,49,54,67 ]

jak bym przeżucił dane do strony
Auto.object.EDC16C34 i bym mjał zmienna jako lista ( [ 69, 68, 67,49,54,67 ]

Można to zrobić deklarując odpowiednie pola w modelu oraz parsując obiekt JSON.

Kopiuj
from django.db import models
import json

class Auto(models.Model):
    # ...
    title=models.TextField()
    softNumbers=models.JSONObject()
    length=models.IntegerField()

content = """[{
        "title": "edc16c34_psa",
        "EDC16C34" : [ 69, 68, 67,49,54,67 ]
    },
    {	"title" :"nr_soft",
        "SOFT_NR": [ 49, 48, 51 ,55]
    },
    {	"title": "tablica_dtc_1" ,
        "dlugosc" : 2000,
        "idx_dtc_1" : [5,51,5,50,0,0,0,0,0,0,0,0],
        "idx_switch_1" : [5,0,22,33]
    }]"""

items = json.loads(content)

item = items[0]

Auto.objects.create(
  marka="Ford",
  opis="My card",
  title=item['title'],
  softNumbers=json.dumps(item['SOFT_NR']),
  length=item['dlugosc']),
)

Tylko zwróć uwagę, że nie wszystkie pola są w każdym obiekcie, więc musiałbyś dopisać obsługę opcjonalnych pól.

O1
  • Rejestracja:prawie 3 lata
  • Ostatnio:9 dni
  • Postów:40
0

Nawet lepiej , z json mogę zrezygnować , zamiast plikow ison będe przechowywał modele ale tu jest problem z danymi w formie listy
Np bez django to proste

Kopiuj

    self.tytul=tytul               #string
    self.wartosc=wartosc           #lista

#tworzymy objekt
mojeauto=Auto_5(tytul='sport',wartosc=[12,45,23,45])

a jak podobna rzecz zrobić w django

Kopiuj
    tytul=models.CharField(max_length=50)    # tutaj spoko 
    wartosc=?????                            # jaki rodzaj wybrać
                                             # mogę też CharField ale to będzie
                                             # '[12,45,23,45]' i za karzdym razem muszę do funkcji i
                                             # for pobieraj in ..... i zamieniać n int

Jest rodzaj fielda w models aby przechowywał liste int
Niby jest bytarray ale to też trzeba przerabiać
?

NA
  • Rejestracja:ponad 12 lat
  • Ostatnio:22 dni
  • Lokalizacja:Trójmiasto/Gdynia
  • Postów:25
0

@ogrod123 Mam wrażenie, że przede wszystkim nie do końca wiesz, co chcesz osiągnąć.

O1
  • Rejestracja:prawie 3 lata
  • Ostatnio:9 dni
  • Postów:40
0

Mój cel to stworzyć aplikacje internetową na wzór aplikacji desktopowej którą mam zrobiona do przetważania plików binarnych
które są we flash lub eeprom sterowników . To tak w skrócie .
Na podstawie ciągów liczbowych np [1,2,3,4,5,6,6] które szukamy i jak znajdziemy to cos tam zmieniamy.
Chodziło oto że w python zapisać to to nie problem slownik lub lista i już
Ale ok już mam rozwiązanie

Kopiuj
tytul=models.CharField(max_length=100,default='edc16c34')
soft_nr=models.JSONField(default=list)

jest ok bo jak robię type(soft_nr) -> list

ale chce pobrać plik od użytkownika i zapisać w bazie danych

Kopiuj
class Plik(models.Model):
    dane_pobrane=models.BinaryField

to nie bardzo wiem jak

Kopiuj
def open_file(reqest):
    global dane
    dane=[]
    data = filedialog.askopenfilename()
    plik = bytearray(open(data, 'rb').read())
    print(plik)
    pobrany_z_bazy=Plik.objects.get(id=1)
    pobrany_z_bazy.dane_pobrane=plik                          # to jest atrybut modelu Plik_baza
                                                              # tytul=model..BinaryField()
                                                              # to nadpisuje istniejący plik w bazie bo tak chciałem 
    pobrany_z_bazy.save()
    return render(reqest,'apka_1/open_file.html',{'pobrane_dane':plik[:20]}) # to tylko tak dla zobaczenia co pobralo bo duży plik

to otwieranie zadoptowałem z desktopowej apki , działa ale nie wiem czy moze tak być
Pozdrawiam i dziękuje wszystkim za odpowiedz

edytowany 1x, ostatnio: Riddle

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.