为Django应用程序选择哪个数据库引擎?

时间:2012-03-02 20:49:12

标签: python database django sqlite

我是Django的新手,并且只使用sqlite3作为Django中的数据库引擎。现在,我正在开发的一个应用程序变得非常大,无论是在模型的复杂性还是请求/秒。

Django支持的数据库引擎如何在性能方面进行比较?使用其中任何一个的任何陷阱?最后但并非最不重要的是,一旦你使用了一个引擎,转换到另一个引擎有多容易?谢谢!

4 个答案:

答案 0 :(得分:33)

如果您打算使用关系数据库,Django社区中最受欢迎的似乎是PostgreSQL。这是我个人的最爱。但是,MongoDB似乎也在Python / Django社区中变得非常流行(尽管如此,我从未用它做过一个项目)。 MySQL上也有很多成功的项目。但是,我个人更喜欢PostgreSQL 9.0或9.1。希望这会有所帮助。

编辑:我没有用这篇文章做那么好的工作。只想添加几个注意事项。

对于绝大多数网站,无论是MySQL还是PostgreSQL都能正常运行。两者都有自己的优点和缺点。我建议你谷歌“MySQL vs. PostgreSQL”这个搜索有很多点击(当时写这个,我超过3,000,000)。以下是评估的一些提示。

  1. 强烈偏好最近的文章。尽量确保将MySQL 5.5与PostgreSQL 9.0或9.1进行比较。
  2. MySQL让你选择你的存储引擎。 IMO,关闭苹果与苹果的比较是InnoDB到Postgres。
  3. 请记住,您可能不需要InnoDB或Postgres的所有功能。您还应该查看其他一些存储引擎。
  4. 此外,如果您打算在系统中使用任何触发器,那么MySQL和InnoDB会有一些非常讨厌的错误,它们与ACID兼容。这是the first one,这里是another one。您可能不需要此功能,只需注意它。

    可能对您有所影响的最后一件事是,使用PostgreSQL,您可以使用Python编写db函数。这是一个link to the docs

答案 1 :(得分:12)

MySQL和Postgres是Django社区中使用的两种最常见的数据库后端,性能相当。我同意Postgres在Django社区更受欢迎,尽管我没有任何硬数据来支持它。我当然不是故意选择MySQL,但我会说使用MySQL与Django(或一般的MySQL)有一些常见的陷阱:

  1. MyISAM没有事务支持(不再是5.5.5中的默认值)
  2. 没有毫秒级的日期支持
  3. 没有时区支持日期时间
  4. 唯一字符字段必须少于255个字符
  5. 默认排序规则不区分大小写
  6. Django的各种功能有一些文档在各种数据库后端不受支持:https://docs.djangoproject.com/en/1.3/ref/databases/

答案 2 :(得分:6)

MySQL和PostgreSQL最适合Django。我强烈建议当你选择一个改变你的开发设置以便在开发时使用它(反对在开发模式下使用sqlite3和在prod中使用“真实”数据库),因为存在微妙的行为差异,这可能会引起很多麻烦未来。

答案 3 :(得分:4)

我不确定使用哪个数据库,但如果有人计划使用MongoDB,请注意它只适用于py2而不适用于py3。

参考链接:

Project Setup with Django 1.10, mongodb and Python 3.4.3

Error while setting up MongoDB with django using django mongodb engine on windows

Setting up MongoDB + Django