2012-09-13 15 views

cevap

29

[Nb. Bir çok ben de cevabını güncelleme düşündüm soru yayınlanmıştır beri oldu - şimdi yeni Django-postgresql ve PostgreSQL 9.3 bilgilerin]

PostgreSQL dahil 9,3

PostgreSQL içinde

JSON desteği (bkz doc fazla oluyor ve daha ilginç. JSON alanlarını sanki veritabanı sütunları gibi aramak mümkün! Bu destek hala temel ve standart sütun operatörleri ile eşit değil (bkz. daha önce), Django ORM ile kullanmak için son derece uygun olacak

PostgreSQL 9.2

JSON veri türü, pgSQL 9.2 içinde basically text'dir. Ne ekledi JSON doğrulama - yararlı, ancak kafa dönüm değil.

** Django ve Django ileri PostgreSQL desteği için

Son zamanlarda Kickstarted backed development PostgreSQL JSON birkaç ay önce finanse edildi. JSON türü için gelişmiş destek, ancak muhtemelen yalnızca 9.4:

için destek içerir. Postgres ekibi yakın zamanda bir jsonb veri türü - ikili depolanmış JSON desteğini birleştirmiştir. Postgre'lar 9.4 çıkana ve sadece jsonb veri tipini destekleyene kadar JSON desteğini geciktirmem olasıdır. Bunun birkaç nedeni vardır, en önemlisi mevcut json veri türünün uygulamada ciddi bir şekilde kısıtlanması, hatta bir eşitlik operatöründen yoksun olmasıdır. Bu, Django ek açıklama kodunun bazı bölümlerinin geçersiz sorgu oluşturduğunu (bu rapora bakın) ve aynı zamanda bir __exact arama işleminin yasaklanması gerektiği anlamına gelir. Django'daki tüm bu kenar durumlarını ele almak büyük miktarda karmaşıklığa yol açacaktır ve jsonu bir metin alanında depolamaktan elde ettiğiniz avantajlar aslında oldukça sınırlıdır. 9.4 bu yılın sonuna doğru çıkacak, sonuç olarak JSON alanlarının sadece 1.8 sürümde yer alması muhtemel.

Kaynak: Ayrıca mjtamlyn blog

Psycopg şimdi doğal JSON field (yanı sıra HSTORE) destekler.

** Django DIY özel bir veritabanı türünü kullanan kendi modeli alanı oluşturmak oldukça kolaydır django ise

, field db_type() bakınız **.

fark edin: Bu sadece pgSQL altında çalışacak

  1. - Şu anda çoğunlukla kazanacaktır
  2. (koşullu diğer veritabanları üzerinde 'text' türü dönebilirsiniz rağmen) Eğer kod taşınabilirliği sınırlandırıyor sadece veritabanı tarafı json doğrulama
  3. ve elbette doğrudan bir JSON nesnesini alma zevkini!

Ancak Python'un JSON için/direct/support'a sahip olmamasına dikkat edin, bu nedenle python'da json boşaltma/yükleme maliyetini gerçekten atlamıyorsunuz; string dönüşümden kaçınıyorsunuz - ancak içselleri kontrol etmedim veya herhangi bir gerçek fark olup olmadığını görmek için kıyaslama yapmam.

PostgreSQL 9.3 ile ve şeyler gibi görünüyor Ayrıca django JSONField başlayıp zaten boilercode plakasının bir sürü alabilir

daha ilginç hale gelebilir aşağıdaki basitçe db_type yöntemini geçersiz.

Benim düşünceme göre, daha ilginç ve bir veritabanı kilitlemeye değer (her durumda pgSql seviyorum!), array_to_json and row_to_json kullanarak bir JSON yapısı olarak verileri yeniden almak için pgSQL seçeneğidir. Sorunun kapsamı dışında bir durum olsa da, bu durum queryset'lerde daha ciddi bir değişiklik gerektirir.

+0

Json türünün içindeki alanları dizine ekleyemiyor musunuz? –

+0

Aşağıdaki bağlantı, temel olarak metinden char alanına ( ) https://github.com/bradjasper/django-jsonfield#other-fields – stormlifter

+0

Aynı soruyu ve bir kaç tane daha veri noktasını dizine eklemesine izin veren bir seçeneği gösterir: (1) 'django-pgfields', sarmalayıcıların JSON veri türünü kullanmasını sağlar, ancak Postgres JSON arama özelliklerine yerel erişim sağlamamaktadır. (2) Şubat 2014'te bir kickstarter, Django 1.8 için bir hedef teslimatı olan "django.contrib.postgres" içindeki tüm Postgres veri türleri için yerel Django desteğini uygulamak için tam olarak finanse edildi. Herkese açık olarak yayımlanan kod sadece çok temel özelliklere ilerledi: https://www.kickstarter.com/projects/mjtamlyn/improved-postgresql-support-in-django – mirth23

8

Django 1.9'dan itibaren, , Django ile birlikte gelen django.contrib.postgres.fields modülünde kullanılabilir. Bu alan PostgreSQL alan tipini kullanır jsonb (json değil).

İlgili konular