我正在开始一个项目,我决定使用Django。
我的问题是关于数据库的创建。我已经阅读了教程和一些书籍,并且总是开始创建模型,然后同步DataBase。我要说,这对我来说有点奇怪。我总是从数据库开始,定义模式,然后创建我的数据库抽象(模型,实体等)。
我已经检查了一些外部可插拔应用程序,并且那些也使用了“模型优先”练习。
我可以看到“模型优先”方法的一些优点,如可移植性,重新部署等。
但我也看到了一些缺点:如何创建索引,索引类型,触发器,视图,SP等。
那么,你如何开始一个现实生活中的项目?
答案 0 :(得分:12)
触发器,视图和存储过程实际上并不是Django世界的一部分。它可以使用它们,但它是痛苦的和不必要的。 Django的开发人员认为业务逻辑属于Python,而不属于您的数据库。
对于索引,您可以将它们与模型一起创建(使用db_index
和unique_together
之类的内容,也可以稍后通过使用South之类的数据库迁移来添加它们。
答案 1 :(得分:7)
大多数情况下,我们不为我们的模型编写SQL(例如创建索引,创建表等等),而是依靠Django为我们生成它。
从模型层开始设计应用程序是绝对可以的,因为您可以依靠Django来生成所需的正确数据库sql。
但是,Django确实为您提供了各种函数来复制这些数据库函数:
db_index=True
unique = True
或unique_togther = (('field1', field2'),)
用于复合唯一约束。使用Django而不是编写sql的优点是,您可以将自己从您正在使用的特定数据库中抽象出来。换句话说,您可能有一天会在SQLite
,并在下一个时间切换到PostgresQL
或MySQL
,而且此更改将相对轻松。
示例:强>
运行时:
python manage.py syncdb
Django自动创建表,索引,触发器等,它需要支持您创建的模型。如果您对django为您创建数据库感到不舒服,可以随时使用:
python manage.py sqlall
这将打印出Django需要具有的SQL语句,以使其模型正常运行。您还可以使用其他sql
命令:
请参阅:https://docs.djangoproject.com/en/1.3/ref/django-admin/#sql-appname-appname