django数据库处理

本文详细介绍了如何在 Django 中创建数据结构、添加 app 到 setting.py、创建数据表及基本数据访问方法,包括添加数据、数据过滤、获取单个对象、数据排序等操作,并展示了如何自定义管理界面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://bio.rusaer.com/archives/280

 

之前搭建环境是为了更好的进行编辑,现在就进行数据的建模

1,在django里,创建数据结构相对来说十分简单,就是在创建的app网站文件夹下的models.py中定义,这里我就以简单的blog程序来做解释:models.py

from django.db import models

#导入数据库模块

class Reporter(models.Model):

#定义一个表格

full_name = models.CharField(max_length=70)

#字段名,即表头。定义为单行

def __unicode__(self):

return self.full_name

class Article(models.Model):

pub_date = models.DateTimeField()

headline = models.CharField(max_length=200)

#上下都类同

article = models.TextField()

#这个textfield就是多行,编辑文章内容用,调用编辑器也是这个

reporter = models.ForeignKey(Reporter)

#外键

def __unicode__(self):

return self.headline

# 还有好多函数,都是可以使用的,如URLField EmailField 可以参考手册

2,添加app到setting.py

clip_image002
选中部分就是添加的app

3,创建数据表

首先,现校验一下模型的有效性,cd转到工程目录,运行

python manage.py validate

validate 命令检查你的模型的语法和逻辑是否正确。如果一切正常,你会看到 0 errors found 消息。如果有问题,它会给出非常有用的错误信息来帮助你修正你的模型。然后再运行

python manage.py sqlall blog

sqlall 命令并没有在数据库中真正创建数据表,只是把 SQL 语句段打印出来。你可以把这些语句段拷贝到你的 SQL 客户端去执行它。

当然,Django 提供了更简单的方法来执行这些 SQL 语句。运行 syncdb 命令:

python manage.py syncdb

这样数据就创建成功了。

4,基本数据访问

python manage.py shell

>>>from blog.models import * #创建对象,import模型,传入值将其实例化

>>>p1 = Article(pub_date = ’2010/04/15′, headline=’it is a example’, article = ‘article text’, reporter = ‘admin’ )

>>>p1.save() #调用该对象的save()方法,将对象保存到数据库中,django会在后台执行insert语句。

>>>article_list = Article.objects.all() # 使用树形objects从数据库中获取对象,objects.all调用所有对象,django会在后台执行一条select sql语句。

>>>article_list

[<headline: it is a example>] #返回值,因为models.py里用return self.headline返回headline的值

数据过滤

如果想活的数据的一个子集,可以用fliter()方法:

>>>Article.object.fliter(headline=”it is a example”)

[<headline: it is a example>]

如果后面添加多个参数,则相当与sql语句中的and

>>>Article.object.fliter(headline=”it is a example”, id=1)

[<headline: it is a example>]

注意,这些操作字符都是精确匹配的,如果sql中的like %example% , 则可以用

>>>Article.object.fliter(headline__contains=”example”)

[<headline: it is a example>]

还有很多如icontains, startswith, endswith, range(sql between 查询)等,可以查看手册。

获取单个对象

如果想获取单个对象,这个时候用get()方法

>>>Article.object.get(headline=”it is a example”)

[<headline: it is a example>]

数据排序

>>>Article.object.order_by(“pub_date”)

多字段排序

>>>Article.object.order_by(“pub_date”,”headline”)

还可以进行逆向排序,在前面加一个减号-前缀

>>>Article.object.order_by(“-pub_date”)

定义缺省排序方式,

Django 使用内部类 Meta 存放用于附加描述该模型的元数据。 这个类完全可以不实现,不过他能做很多非常有用的事情

clip_image004

综合使用

>>>Article.object.fliter(headline__contain=”it”).order_by(“pub_date”)

限制返回的数据

>>>Article.object.all()[0]

删除对象

>>>p = Article.objects.get(id=2)

>>>p.delete()

批量删除,获取查询结果,实例化

>>>p = Article.objects.all()

>>>p.delete()

[]

5,自定义管理界面

老版本的django是直接在models.py的么个模块下自定义,新版本的则是在每个app下新建一个admin.py文件

如我的blog目录下的admin.py:

from django.contrib import admin

#导入共用的admin模块

from sites.blog.models import Reporter, Article

#导入需要进行管理的模块

from django.conf import settings

#导入设置文件

class ReporterAdmin(admin.ModelAdmin):

#定义Reporter的管理方式

list_display = (‘full_name’,)

#列表显示的内容

search_fields = (‘full_name’,)

#添加一个搜索框,以full_name为变量搜索

class ArticleAdmin(admin.ModelAdmin):

list_display = (‘pub_date’, ‘headline’, ‘article’,'reporter’)

date_hierarchy = ‘pub_date’

ordering = (‘-pub_date’,)

#按时间倒序排列

raw_id_fields = (‘reporter’,)

class Media:

js = (settings.MEDIA_ROOT+’js/tiny_mce/tiny_mce_src.js’, settings.MEDIA_ROOT+"filebrowser/js/TinyMCEAdmin.js",)

#定义textarea的js,即添加可视化编辑器

admin.site.register(Article, ArticleAdmin)

admin.site.register(Reporter, ReporterAdmin)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值