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?