背景
我想在数据库里增加一个表,然后就在models.py中写了一个class,然后点击Django--->Sync DB,结果毫无反应!!!Console里tips显示,该条命令什么事情也没做。去数据库一看,果然,我要新建的表确实是没有。百思不得其解。果断自己手动在数据库里建了这个表,不管什么syncdb了,直接用,结果还是有问题(后来发现,这种方法是可行的,问题出在自己的马虎上)。考虑到eclipse的庞大,想去命令行下试试,才发现自己已然忘了怎么在命令行去跟django互动。
django的舞台
1、搭台
django的起步还是很快的,只需要一条命令就可以将唱戏的台子搭好,这就是:
python django-admin.py startproject YOURPROJECT
真的是so easy!多说一句,这不是tomcat那样的服务器:
Don’t use
this server in anything resembling a production environment. It’s intended only for use while developing. (We’re in the business of making Web frameworks, not Web servers.)
2、唱戏
此时,django-admin.py可以歇着了,接下来的大哥是manager.py,他负责接下来的工程启动(runserver)、新建应用(startapp)、同步models.py和数据库(syncdb)、提供进入命令行的接口(shell)等。
真的像一部戏的导演!
2.1 runserver
一句话:开唱!
python manager.py runserver 8000
2.2 startapp
演员出场。
默认的每个app下面都有views.py(负责页面的逻辑处理)、models.py(负责数据存储),还有__init__.py,表明这是一个Python的package。要想models.py和数据库能同步,需要在settings.py里的installed_app里把新建的app加进去。
2.3 syncdb
不是很恰当的比喻,算是让后台为前台准备道具吧。今天的问题就出在这,其实他这一步只是为了省去你自己建表的操作,完全可以不用他,自己去建表。有必要自己建呢?比如一个project里有好多个app,而其中有的数据表又被很多app共享,怎么办?要每个app的models都放一个吗?不好管理吧。所以比较简单的办法就是在manager.py所在主文件夹里统一放一个models就行了,需要的表结构自己去建。这样会不会导致Django不知道数据表的存在阿?完全不会,Django去找数据库中表的时候靠的是settings.py中关于数据库的设置。这一点就有点像java了,有驱动、库名、IP地址、端口号,用户名/密码,就不用担心找不到数据库了。
2.4 shell
程序员的世界里怎么能没有shell。。。这里可以方便的操作幕后的一切啊。这里只简单说一下如何在shell里与数据库打交道。
想访问某个表(models.py中的class),首先要把它import过来(文件夹的名字就是包的名字,models.py就是那个类的名字,与java不同的是,import到此还没结束,还要import具体到models.py中的class)。
数据库的常用操作:
查:
获取所有记录:recoreds=class_table.objects.all()
筛选:records=class_table.objects.filter(filed=value)
这个查是比较有意思的,查的语句执行完之后,Python并不会真的去碰数据库,而是等到你真用这些数据了,他才去取。什么时候去呢?比如你要迭代取值了,其他情况请参见https://docs.djangoproject.com/en/1.6/ref/models/querysets/#when-querysets-are-evaluated
增:
record=class_table(field1=value1,field2=value2,...)
record.save()
改:查出来之后,record就是对象了,通过点访问符,进行值的修改就可以了,改完之后save一下
删:
在查的基础上调用一下delete方法就可以了
先写这么多吧,都是最基础的,其他的用的时候再查吧。