Django-website 程序案例系列-4 ORM数据库操作

数据库表的创建:

使用mysql时注意,在setting.py中的设置:

DATABASES = {    ‘default‘: {        ‘ENGINE‘: ‘django.db.backends.mysql‘, #mysql的引擎        ‘NAME‘: ‘‘,  #数据库名        ‘USER‘: ‘‘,  #数据库用户名        ‘PASSWORD‘: ‘‘, #数据库密码        ‘HOST‘: ‘127.0.0.1‘, #数据库host        ‘PORT‘: ‘3306‘, #数据库端口    },}

还需在项目文件夹下的__init__.py中添加mysql的驱动:

#django默认使用MySQLdb模块连接mysql#需要主动修改为pymysqlimport pymysqlpymysql.install_as_MySQLdb()

models.py # 在这个文件中创建类

from django.db import models

# 生成的表名为day1_userinfoclass UserInfo(models.Model): #创建的类必须继承models.Model    # id列,自增,主键 不用用户创建 django会自己给你创建一个    username = models.CharField(max_length=32)    password = models.CharField(max_length=64)

在命令符界面执行:python manage.py makemigrations #生成临时文件在migrations文件夹中python manage.py migrate     #在数据库中生成表

生成了django自带的很多张表

 数据库表基本操作:

def orm(request):    #插入数据    #方式1:    models.UserInfo.objects.create(username=‘root‘,password=‘123‘,)    #方式2    obj = models.UserInfo(username=‘zhangjian‘, password=‘123‘)    obj.save()    #方式3    dic ={‘username‘: ‘hapi‘, ‘password‘: ‘1123‘}    models.UserInfo.objects.create(**dic)    #查询数据    #查询表出来的是一个django表对象是以列表QuerySet对象    <QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>    result = models.UserInfo.objects.all() #查询所有    result = models.UserInfo.objects.filter(username=‘root‘,password=‘123‘) #条件查询    for row in result:  #对表进行循环取出值        print(row.id, row.username, row.password)    #删除操作    models.UserInfo.objects.filter(username=‘root‘).delete() #删除用户名为root的    #更新操作    models.UserInfo.objects.all().update(password=666)#所有用户密码改成666

return HttpResponse(‘orm‘)

页面操作数据库增删改查:

url路由配置:
url(r‘^index/‘, views.index),url(r‘^user_info/‘, views.user_info),url(r‘^userdetail-(?P<uid>\d+)/‘, views.userdetail),url(r‘^userdel-(?P<uid>\d+)/‘, views.userdel),url(r‘^usered-(?P<uid>\d+)/‘, views.usered),
index.html页面:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    body{
        margin: 0;
    }
    .menu{
        display: block;
        padding: 5px;
    }
</style>
<body>

    <div style="height: 48px;background-color: black;color: white">
        <h3>111111111111111</h3>
    </div>
    <div>
        <div style="position: absolute;top: 48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
            <a class="menu" href="/user_info/">用户管理</a>
            <a class="menu" href="/user_group/">用户组管理</a>
        </div>
        <div style="position: absolute;top: 48px;left: 210px;bottom: 0;right: 0;overflow: auto;">

        </div>
    </div>
</body>
</html>

py代码:

def index(request):
    return render(request, ‘index.html‘)

查询用户页面user_info.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    body{
        margin: 0;
    }
    .menu{
        display: block;
        padding: 5px;
    }
</style>
<body>

    <div style="height: 48px;background-color: black;color: white">
        <h3>111111111111111</h3>
    </div>
    <div>
        <div style="position: absolute;top: 48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
            <a class="menu" href="/user_info/">用户管理</a>
            <a class="menu" href="/user_group/">用户组管理</a>
        </div>
        <div style="position: absolute;top: 48px;left: 210px;bottom: 0;right: 0;overflow: auto;">
            <h3>添加用户</h3>
            <form action="/user_info/"  method=‘POST‘>
                <input type="text" name="user"/>
                <input type="text" name="pwd" />
                <input type="submit" name="添加"/>
            </form>
                <h3>用户列表</h3>
            <ul>
                {% for row in user_list %}
                <li>
                    <a href="/userdetail-{{ row.id }}/">{{ row.username }}</a> |
                    <a href="/userdel-{{ row.id }}/">删除</a> |
                    <a href="/usered-{{ row.id }}/">编辑</a>
                </li>
                {% endfor %}
            </ul>
        </div>
    </div>
</body>
</html>  

用户详情页面userdetail.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    body{
        margin: 0;
    }
    .menu{
        display: block;
        padding: 5px;
    }
</style>
<body>

    <div style="height: 48px;background-color: black;color: white">
        <h3>111111111111111</h3>
    </div>
    <div>
        <div style="position: absolute;top: 48px;bottom: 0;left: 0;width: 200px;background-color: brown;">
            <a class="menu" href="/user_info/">用户管理</a>
            <a class="menu" href="/user_group/">用户组管理</a>
        </div>
        <div style="position: absolute;top: 48px;left: 210px;bottom: 0;right: 0;overflow: auto;">
            <h1>用户详细信息</h1>
            <h5>{{ obj.id }}</h5>
            <h5>{{ obj.username }}</h5>
            <h5>{{ obj.password }}</h5>
        </div>
    </div>
</body>
</html>

py代码:

def user_info(request):
    if request.method == "GET":
        user_list = models.UserInfo.objects.all()
        print(user_list.query) #查看原生的sql语句
    elif request.method == "POST":
        u = request.POST.get(‘user‘)
        p = request.POST.get(‘pwd‘)
        models.UserInfo.objects.create(username=u, password=p)
        return redirect(‘/user_info/‘)
    return render(request, ‘userinfo.html‘, {"user_list": user_list})
def userdetail(request, uid):    obj = models.UserInfo.objects.filter(id=uid).first() #取id=uid的用户    return render(request, ‘user_detail.html‘, {"obj": obj})

删除用户py代码:

def userdel(request, uid):
    models.UserInfo.objects.filter(id=uid).delete()
    return redirect(‘/user_info/‘)

修改用户py代码:

def usered(request, uid):
    if request.method == "GET":
        obj = models.UserInfo.objects.filter(id=uid).first()
        return render(request, ‘usered.html‘, {"obj": obj})
    elif request.method == "POST":
        u = request.POST.get("username")
        p = request.POST.get("password")
        models.UserInfo.objects.filter(id=uid).update(username=u, password=p)
        return redirect(‘/user_info/‘)
				
时间: 2024-07-31 18:12:57

Django-website 程序案例系列-4 ORM数据库操作的相关文章

Django学习【第5篇】:Django之ORM数据库操作

django之ORM数据库操作 一.ORM介绍 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录----------------->类实例化对象 ORM的两大功能: 操作表: - 创建表 - 修改表 - 删除表 操作数据行: - 增删改查 ORM利用pymysql第三方工具链接数据库 Django没办法帮我们创建数据库,只能我们创建完之后告诉它,让django去链接 二.创建表之前的准备工作 一.自己创建数据库

【Django】ORM数据库操作

Django-ORM数据库操作 映射关系: 表名 -------------------->类名 字段-------------------->属性 表记录----------------->类实例化对象 ORM的两大功能: 操作表: - 创建表 - 修改表 - 删除表 操作数据行: - 增 删 改 查 ORM利用pymysql第三方工具链接数据库 Django默认的是sqlite数据库 将Django数据库修改为mysql: 1.settings.py 配置 DATABASES = {

Django—ORM数据库操作

---恢复内容开始--- 一.orm介绍 1 ORM即Object Relational Mapping,全称对象关系映射. 优点: 1 不用写sql,不会sql的人也可以写程序 2 开发效率高 2 缺点: 1 可能sql的效率低 3 如何使用: 如果连接mysql:在setting里配置: 'default': { 'ENGINE': 'django.db.backends.mysql', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', '

Django(三) ORM 数据库操作

比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段类型 1.字段类型介绍 2.字段参数介绍 3.Django ORM 外键操作 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 ORM:关系对象映射.定义一个类自动生成数

Django入门4: ORM 数据库操作

大纲 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段类型 1.字段类型介绍 2.字段参数介绍 3.Django ORM 外键操作 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 ORM:关系对象映射.定义一个类自动生成数据库的表结构. 创建数据库的时候,一般有以下几种常用数据类型:数字.字符串以及时间. ORM分为两种: DB Fi

Django-website 程序案例系列-16 modle.form(表单验证)

案例程序: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/fm/" method="POST"> #3个输入框分别是user/pwd/ema

Django-website 程序案例系列-18 多表跨表操作优化

详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化 在数据库有外键的时候,使用 select_related() 和 prefetch_related() 可以很好的减少数据库请求的次数,从而提高性能.本文通过一个简单的例子详解这两个函数的作用.虽然QuerySet的文档中已经详细说明了,但本文试图从QuerySet触发的SQL语句来分析工作方式,从而进一步了解Django具体的运作方式. 本来打算写成一篇单独的文章的,但

Django-website 程序案例系列-17 forms表单验证的字段解释

1.Django内置字段如下: Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial=None, 初始值 help_text='', 帮助信息(在标签旁边显示) error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'} show_hidden_initial=False, 是否在当前插件后面再加一个隐藏的且具

Django学习【第5篇】:Django之ORM数据库操作注意细节

自己没有记住的一点小知识(ORM查询相关) 一.多对多的正反向查询 class Class(models.Model): name = models.CharField(max_length=32,verbose_name="班级名") course = models.CharField(verbose_name="课程",max_length=32) def __str__(self): return self.name class Teacher(models.