Django:开发使用sqlite,生产使用mysql?

20

快速问题:在开发Django项目时使用sqlite,然后在生产服务器上使用MySQL,这是一个好主意吗?

6个回答

24

我强烈建议在开发、生产以及所有中间阶段都使用相同的数据库后端。Django可以抽象出数据库操作,但是不同的环境可能会导致可怕的国际化、配置问题和难以察觉的微小差异,这些问题直到你将其推向线上才会显露。

个人而言,我会坚持使用MySQL,但我从未习惯过PostgreSQL :)


好的,我很高兴我还没有走那条路。也许我会看看Postgres,因为我可以在Cygwin中安装它。让MySQL在那里工作已经证明不值得麻烦了。 - Jason Miesionczek
1
为什么要费心安装Cygwin,MySQL和Postgres都有本地的Win32包啊? :) - Dmitry Shevchenko
我知道有点晚了,但是使用XAMPP与Django真是太棒了——对我来说非常兼容。我在MySQLdb上遇到了一些麻烦,但是我在网上搜索并找到了编译好的库。大家加油! :-) - Frank V

10

我同意之前的所有答案,并补充一些明确的原因:

  • MySQL在你试图存储超出字段宽度的字符串时会发出警告异常 - 你在SQLite中不会得到这些警告,因此不仅你的字符串在开发和生产环境中会有所不同,程序行为也会不同。
  • 两个后端中的错误是不同的 - 我记得曾经我尝试使用SQLite进行开发,而在生产环境中使用MySQL,但结果是我在MySQL后端中发现了一个Bug,而在SQLite后端中没有。因此,我为它提交了一个工单并切换到MySQL进行测试 :-)

并且你甚至可以试着在速度方面与SQLite竞争,可以看看我的回答:

如何增加Django中MySQL表创建的速度?


8

你为什么想要这样做?

  • SQLite尚未支持存储过程。
  • SQLite是typeless的。在运行MySQL时,可能会遇到许多类型转换问题。
  • 另外,SQLite目前还不支持RIGHT JOIN。

1
这些都不会影响我的Django需求,虽然你说得对。 - analytik

7

在所有环境中使用相同的数据库。

尽管ORM试图抽象不同数据库之间的差异,但基于数据库的某些功能总是会有所不同。数据库可移植性是一个完全的神话。

此外,针对您永远不会在生产中使用的代码路径进行测试和开发似乎非常疯狂,不是吗?


数据库的可移植性是一个彻头彻尾的谎言。谢谢! - Marc

3
简而言之,不需要;除非你想不必要地将开发时间加倍。

3

我在开始使用sqlite时犯了一个很大的错误,当我尝试在生产服务器上部署mysql时,事情并没有像我预期的那样顺利。我尝试使用各种开关进行dumpdata/loaddata操作,但总是会接连出现错误。为了自己着想,请在生产和开发中使用相同的数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接