我是Django和数据库的新手。
Django使用sqlite数据库作为默认数据库。是否可以将图像存储在sqlite数据库中并显示在我的网页上?我在Django官方网站上找不到任何文档。
ImageField
和FileField
都只是指向文件实际上传位置的链接。如果你阅读Django关于如何使用imageField的文档,你可能会看到一个upload_to
属性。
这两个字段都是在Django的ORM中实现的,并且与数据库无关(即应该在SQLite、MySQL或Django支持的任何其他数据库上工作(。
您可以查看有关如何管理文件的示例。
链接中的第一个示例显示了一个汽车模型,并将图像上传到MEDIA_ROOT文件夹下的cars
。
from django.db import models
class Car(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=5, decimal_places=2)
photo = models.ImageField(upload_to='cars')
备选方案
如果你真的需要将图像保存到数据库中的live
,你可以随时使用django的BinaryField并将整个图像保存为BLOB。
from django.db import models
class Car(models.Model):
name = models.CharField(max_length=255)
price = models.DecimalField(max_digits=5, decimal_places=2)
photo_as_blob = models.BinaryField() # save photo as binary object
正如您从其他答案中看到的,将大文件直接保存在DB中通常不是一个好的做法。
SQLite是Django框架的默认数据库系统。它对本地服务器来说非常好。但是,如果你想在其中托管项目,最好使用MySQL或PostgreSQL。我的建议是使用PostgreSQL。如果你想在Heroku中托管它,他们使用PostgreSQL,这非常容易。您也可以使用AWS,这对PostgreSQL和MySQL都很容易。
最后,我个人的建议是使用PostgreSQL。
一般来说,SQLite对于任何严肃的项目来说都不是一个很好的数据库。您通常会使用MongoDB、Postgres或MySQL之类的东西。我认为Django与PostgreSQL的配合非常好。SQLite非常适合实践和测试或小型项目,但一旦必须扩大规模,您可能会遇到麻烦。
此外,正如Willem所说,将图像存储在数据库中不是一个好主意。通常,存储在DB中的实例会有一个指向存储在计算机中的图像文件的路径,或者有一个存储在Cloudinary等图像存储服务上的图像的密钥。