Dosya içeriğinin depolanması FileField
ürününe sahip olduğum bir model yapıyorum. Dosya içeriğini dosya yolu yerine bir veritabanı sütununda saklamak istiyorum. Baska öneri?DB
DB
cevap
o
sadece bu tablo fileContent ait db sütun fileContent içinde fileContent saklayacak yönetici
filecontent=form.cleaned_data.get('upload_file')
data =filecontent.read()
from django.db import connection
cursor = connection.cursor()
cursor.execute("update filecontent set filecontent=(%s) where id=(%s)",[data,obj.id])
connection.connection.commit()
cursor.close()
connection.close()
yılında kaydetme yöntemi overide çok kolaydır
Bu işe yaramaz. ASCII olmayan karakterlerle kaydetmeye çalıştığınız ilk ikili dosya bunu patlatacaktır. Önce base64 kullanarak kodlamanız ve sonra onu veritabanından okurken çözmeniz gerekir. – Cerin
Peki, basitçe bir İkili sütununda depolamaya ne dersiniz? Daha sonra bayt koleksiyonunu saklayabilirsiniz. Dosya adı da sizin için önemliyse, bunu ek bir ad sütununda saklayabilirsiniz.
İstemcileri dikkate almayın. İçeriğiniz üzerinde tam kontrol sahibi olmak istiyorsanız, dosyaları veritabanındaki blob alanına koyun. Genelde dosya ismini de ayrı bir alanda tutuyorum, bu yüzden dosyayı gerektiği gibi yeniden yapılandırabilirim (bu sayede uzantıyı, çoğu işletim sistemindeki bir dosya tipine bağlayan uzantıyı koruyabilirsiniz).
Gerçek blob verilerini ayrı bir tabloya kaydettiğinizden, yalnızca dosya adınız/ekstra bilgi tablonuza bir kimlik aracılığıyla depolandığından emin olun ... böylece dosyayla ilgili herhangi bir bilgiyi ele aldığınızda performanstan ödün vermezsiniz içeriğin kendisi dışında.
Nişancıların fark etmediği şey, veri tabanlarının basitçe, son derece optimize edilmiş bir dosya sistemi biçimidir. Baytlar bayttır ve disk sektörleri disk sektörüdür. Veritabanları, dosya sistemlerine göre bu baytları organize etmede ve aramada çok daha iyidir. Belirtmek gerekirse, veritabanları çoğu dosya sisteminden çok daha sıkı güvenlik uygular ve daha iyi korunur (yedekleme, destek personeli vb.).
Sadece dosya içeriğini bir tabloyu db sütununda saklamak istiyorum, bunun için tablo israfıyla ilgilenmiyorum. Aynı içeriğe tekrar dosya içeriğini yeniden kazanabilirim. – ha22109
Küçük bir gerçeklik kontrolü için teşekkür ederiz. Ben her zaman Django'nun veritabanındaki dosyaları depolamaya yönelik varsayılan isteksizliğinin aşırı derecede basit olduğunu hissettim. Onları veritabanından sunmak isteseniz bile, modelinizi her iki dünyanın en iyisine sahip olmak için her zaman bir önbellek katmanı ile sarabilirsiniz. – Cerin
Bu eski bir soru olduğunu biliyorum ama orada Bu seçeneğe izin vermek için o zamandan beri yazılmış iyi bir kod oldu. Özel olarak, tüm FileFields ve ImageFields öğelerinin içeriğini veritabanında saklamak için Django'nun depolama API'sini kullanacak olan django-database-files'a bakın. Ayrıca, veritabanını kullanmanın en büyük uyarısının üstesinden gelmek için dosya sisteminde yerel olarak dosyaları önbelleğe almak için bir fork vardır.
- 1. DB
- 2. DB
- 3. Spring Boot'da DB DB Hazırda bekletme Db Schema
- 4. django - db sqlite3 db dönüştürürken loaddata hatası
- 5. Tablo bir db diğerine kopyalanıyor db
- 6. noSQL DB
- 7. log4net: DB
- 8. Android App harici MySQL db ile iletişim kurar db
- 9. raylar için yeni, db sonra rake db çalıştırılıyor: create/migrate
- 10. Sqlite veritabanlarında .db-shm ve .db-wal uzantıları nelerdir?
- 11. AWS DynamoDB - localhost db sunucusunu db ile eşzamanlıyor mu?
- 12. Firefox RootStore cert8.db/key3.db mevcut değil
- 13. Nasıl db: tırmık ve komisyon db: nasıl Heroku üzerinde komisyon?
- 14. Zend DB kullanarak bir alt sorgu yazma DB
- 15. Mongo Db ve Yay
- 16. SQL sunucusu - db adını
- 17. rake db: migrate çalışmıyor
- 18. Mongodb - db adını değiştir
- 19. sorgu Mongo db
- 20. İlişkisel Tablo DB
- 21. db ifadelerini dosyadan çalıştırın
- 22. DB içeriğini, XAML
- 23. Codeigniter hata oturumu DB
- 24. oracle tekrar DB
- 25. Asansörde DB şema geçişi
- 26. Bellek Akışı DB
- 27. sayısı Zend DB (GÜNCELLEME)
- 28. Derby DB parolasını değiştir
- 29. Moodle - DB bilgisi
- 30. DB sahibinin adını PostgreSql
Bunu neden yapmak istiyorsunuz? Dosyalar dosya sistemine aittir. –
Veritabanında saklamak için ne kadar ikili veri beklersiniz? Binlerce büyük ikili dosyayı saklamakla karşılaştırıldığında veritabanındaki birkaç ikili nesnenin saklanması arasında büyük bir fark vardır. – Kane
Evet. Bu kararın gerekçesi nedir? Neden onları FS'de saklamıyorsunuz? – exhuma