将图像存储在sqlite-Django中



我是Django和数据库的新手。

Django使用sqlite数据库作为默认数据库。是否可以将图像存储在sqlite数据库中并显示在我的网页上?我在Django官方网站上找不到任何文档。

Django的ImageFieldFileField都只是指向文件实际上传位置的链接。如果你阅读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等图像存储服务上的图像的密钥。

最新更新