全部博文(33)
分类: SQLite/嵌入式数据库
2011-02-26 09:57:38
首先,要想django支持数据库,得对其配置文件settings.py进行配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'mysite.sqlite', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
按照以上配就行,当然mysite.sqlite需要改成自己的数据库名称。
然后,创建应用,以blog为例,进到你的网站目录,执行如下命令:
python manage.py startapp app_name
配置该应用下的models.py文件,举例:
from django.db import models
class Category(models.Model):
name=models.CharField(max_length=32)
def __str__(self):
return self.name
class Admin:
pass
class Article(models.Model):
title=models.CharField(max_length=64)
published_at=models.DateTimeField('date published')
content=models.TextField()
category=models.ForeignKey(Category)
def __str__(self):
return self.title
class Admin:
pass
作如下配置,保存后执行如下命令:
python manage.py sql app_name
发现其实是对数据库执行了以下命令:
BEGIN;
CREATE TABLE "blog_category" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(32) NOT NULL
)
;
CREATE TABLE "blog_article" (
"id" integer NOT NULL PRIMARY KEY,
"title" varchar(64) NOT NULL,
"published_at" datetime NOT NULL,
"content" text NOT NULL,
"category_id" integer NOT NULL REFERENCES "blog_category" ("id")
)
;
COMMIT;
然后执行python manage.py syncdb语句创建数据库
那么,如何完成数据库的存取、删除、检索等操作呢?
插入,用以上创建的category类表为例:
from mysite.blog import category
p1=category(name='mengl')
p1.save()
这样就行了,即完成了一条记录的插入工作
接下来再调用 p1.save() 将不会创建新的记录,而只是修改记录内容(也就是 执行 UPDATE SQL语句,而不是 INSERT 语句)
以下是查询:
category.objects.all()是查找该表所有字段
如果想要获得数据的一个子集,我们可以使用 filter() 方法:
例如:category.objects.filter(name='mengl'),filter可以同时接受多个参数,我们常用它缩小检索范围,当表内并不知一个字段属性时,例如当班级成绩表不仅有姓名、学号、性别、还有成绩、名次时,我们可以这样用,不同参数间用英文逗号隔开
从模型里删除一个字段可要比增加它简单多了。删除一个字段仅需要做如下操作:
从你的模型里删除这个字段,并重启Web服务器。
使用如下面所示的命令,从你的数据库中删掉该列:
ALTER TABLE books_book DROP COLUMN num;
删除 Many-to-Many 字段
因为many-to-many字段同普通字段有些不同,它的删除过程也不一样:
删除掉你的模型里的 ManyToManyField ,并且重启Web服务器。
使用如下面所示的命令,删除掉你数据库里的many-to-many表:2
DROP TABLE articles;
删除模型
完全删除一个模型就像删除一个字段一样简单。删除模型仅需要做如下步骤:
将此模型从你的 models.py 文件里删除,并且重启Web服务器。
使用如下的命令,将此表从你的数据库中删除:
DROP TABLE article;
|