【问题标题】:Storing images in sqlite - Django在 sqlite 中存储图像 - Django
【发布时间】:2021-04-04 13:28:40
【问题描述】:

我是 Django 和数据库的新手。

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

【问题讨论】:

  • 将图像data存储在数据库中并不是一个好主意,因为数据库检索大量数据的速度相当慢:它需要编码和解码。 ImageField 将存储图像的文件路径,并将图像存储在文件系统中。

标签: python django sqlite django-models django-views


【解决方案1】:

Django 的ImageFieldFileField 都只是指向文件实际上传位置的链接。 如果您阅读 Django 在 how to use imageField 上的文档,您可能会观察到 upload_to 属性。

这两个字段都在 Django 的 ORM 中实现,并且与数据库无关(即应该在 SQLite、MySQL 或 Django 支持的任何其他数据库上工作)。

您可以查看this 以获取有关如何管理文件的示例。

链接中的第一个示例显示了一个汽车模型,并将图像上传到 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

正如您从其他答案中看到的,将大文件直接保存在数据库中通常不是一种好习惯。

【讨论】:

  • 感谢您的回答。如果我正在尝试建立一个电子商务网站,我可以在哪里存储产品图片?
  • 第一种方法是可行的方法,即在 MEDIA_ROOT 下的文件夹中添加文件。请记住,您可以使用带有 ImageField 的 upload_to 属性的自定义函数。查看this answer了解更多详情。
  • 非常感谢。这个答案真的很有帮助。
【解决方案2】:

SQLite 是 Django 框架的默认数据库系统。这对于本地服务器来说非常好。 但是,如果您想在其中托管项目,最好使用 MySQL 或 PostgreSQL。我的建议是使用 PostgreSQL。 如果你想在Heroku 中托管它,他们使用 PostgreSQL,这非常容易。您还可以使用 AWS,这对于 PostgreSQL 和 MySQL 来说都很容易。

最后,我个人的建议是使用 PostgreSQL

【讨论】:

    【解决方案3】:

    一般来说,对于任何严肃的项目来说,SQLite 都不是一个很好的数据库。您通常会使用 MongoDB、Postgres 或 MySQL 之类的东西。我认为 Django 与 PostgreSQL 配合得很好。 SQLite 非常适合练习和测试或小型项目,但一旦你必须扩大规模,你就会遇到麻烦。

    另外,正如 Willem 所说,将图像存储在数据库中并不是一个好主意。通常,存储在数据库中的实例将具有指向存储在您计算机中的图像文件的路径或存储在 Cloudinary 等图像存储服务上的图像的密钥。

    【讨论】:

    • 感谢您的回答。如果我正在尝试建立一个电子商务网站,我可以在哪里存储产品的图像?最佳做法是什么?
    • 就像我说的,我一开始会尝试像 Cloudinary 这样的东西。它有一个免费选项,为您提供 25 GB 的空间来存储图像和 API,允许您使用每个图像的唯一 ID 存储和检索图像。如果您获得大量流量并且人们发布了大量图片,则它允许您扩展到 600 GB。不过我对电子商务不是很熟悉,所以像 Shopify 这样的平台可能有自己的图像存储系统,随便看看。最重要的是,不要将图像存储在您的计算机或数据库中,尤其是不要存储在 SQLite 之类的东西中。
    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多