3.3.orm介绍与model设计

无ORM

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )
cursor = db.cursor()                    # 使用cursor()方法获取操作游标 
cursor.execute("SELECT VERSION()")        # 使用execute方法执行SQL语句
data = cursor.fetchone()                 # 使用 fetchone() 方法获取一条数据
print "Database version : %s " % data
db.close()                                # 关闭数据库连接

使用django的Model

编写model

message/models.py

from django.db import models


class UserMessage(models.Model):
    name = models.CharField(max_length=20, verbose_name='用户名')
    email = models.EmailField(verbose_name='邮箱')
    address = models.CharField(max_length=100, verbose_name='联系地址')
    message = models.CharField(max_length=500, null=True, blank=True, default='', verbose_name='留言信息')
    object_id = models.CharField(max_length=50, primary_key=True, default='', verbose_name='id')

    class Meta:
        db_table = 'user_message'             # 表名,默认为{app名}_{model名}
        ordering = ('-object_id',)             # 按object_id倒序排列
        verbose_name = '用户留言信息'            # 注释信息,会自动加上s,表示复数
        verbose_name_plural = verbose_name    # 注释信息,会自动加上s,表示复数

注册models

hello_django/settings.py

INSTALLED_APPS = [
    'message',
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

生成数据表

$ python manage.py makemigrations message
$ python manage.py migrate message

model的增删查改

添加数据

from django.shortcuts import render

from message.models import UserMessage


def form_view(request):
    user_message = UserMessage()
    user_message.name = 'sophie'
    user_message.email = 'sophie@163.com'
    user_message.address = '上海'
    user_message.message = 'hello shanghai'
    user_message.object_id = 3
    user_message.save()

    return render(request, 'message.html')

删除数据

from django.shortcuts import render

from message.models import UserMessage


def form_view(request):
    all_messages = UserMessage.objects.filter(object_id=4)
    # all_messages.delete()                # 删除方式一
    for message in all_messages:
        message.delete()                # 删除方式二

    return render(request, 'message.html')

查询所有数据

from django.shortcuts import render

from message.models import UserMessage


def form_view(request):
    all_message = UserMessage.objects.all()
    for message in all_message:
        print(message.name)
    return render(request, 'message.html')

按条件查询

from django.shortcuts import render

from message.models import UserMessage


def form_view(request):
    all_message = UserMessage.objects.filter(name='bobby', address='北京')
    for message in all_message:
        print(message.name)
    return render(request, 'message.html')

按条件模糊查询

from django.shortcuts import render

from message.models import UserMessage


def form_view(request):
    all_message = UserMessage.objects.filter(name__icontains='bo')
    for message in all_message:
        print(message.name)
    return render(request, 'message.html')

注意:icontains中的 i 代表忽略大小写

排序

按点击数排序,取前三条记录

all_org = CourseOrg.objects.all()

hot_orgs = all_org.order_by('-click_nums')[:3]

Last updated

Was this helpful?