#翻译自《TwoScoops of Django Best Practices For Django 1.8》 2.1小节
正文
在本地开发使用SQLite3数据库,而在产品中使用PostgreSQL(或者MySQL)是一种常见的开发陷阱。
当我们在开发和产品中使用不同的数据库时,我们遭遇到如下几种常见的错误。
2.1.1 你不能直接抓取一份你的产品数据库的拷贝到本地
当你的产品使用的数据库与你本地开发所使用的数据库不同时,你不能直接抓取一份你的产品数据库的拷贝却在本地检查这些数据。
当然,你能从产品中生成一份SQL的信息转储并且将它导入到你的本地数据库,但那并不意味着你有完全相同的拷贝,因为这些拷贝
已经经历了导出可导入这两个过程。
2.1.2 不同的数据库有不同的Field类型和限制
始终记住,不同的数据库处理各类field数据的方式是不同的。Django的ORM打算协调这些不同,但是它能够做到的很有限。
举个例子来讲,某些人使用SQLite3作为本地开发数据库而使用PostgreSQL作为产品数据库,认为Django的ORM给他们有借口
不去考虑这些不同。最后,问题出现了,因为SQLite3使用动态的、弱类型代替强类型。
当然,Django的ORM拥有允许让你的代码能够以一种更直观的方式与SQLite3交互的优点,但是开发中form和model的验证错误将不能
被捕捉到(即使是在测试中)。知道代码运行到了产品的服务器上。你可能能顺利无阻的在本地存储长字符串,因为SQLite3不关注这个。
但是当到了产品中,你的PostgreSQL或者MySQL数据库将抛出限制错误,而这个错误从来没在你本地出现过。而且如果你不在本地安装
一个相同的数据库,你将一直在错误的复现上浪费时间。
大多数问题在项目运行到一个强类型的数据库(例如PostgreSQL和MySQL)之前通常不能被发现。
Tip:大多数开发者更倾向于在所有的环境中使用PostgreSQL。