• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
武纪亨
博客园    首页    新随笔    联系   管理    订阅  订阅
Django-ORM操作

昨日内容回顾

  • django主要文件

    mysite项目文件夹
    	mysite同名文件夹
        	settings.py
             urls.py
        应用文件夹(可以有多个)
        	migrations文件夹
            apps.py
            admin.py
            views.py
            models.py
        sqlite3
        manage.py
        templates文件夹
    
    """
    urls.py		路由层
    views.py	视图层
    templates   模板层
    models.py   模型层
    """
    
  • 小白必会三板斧

    HttpResponse
    	主要返回文本类型的数据
    render
    	主要返回html文件(还支持模板语法)
        render(request,'index.html',{'name':"jason"})
        render(request,'index.html',locals())
    redirect
    	重定向(全称网址、后缀)
    
  • 静态文件资源及配置

    常见静态文件资源
    	css文件 js文件 图片文件 第三方框架文件
    针对静态文件资源也是需要单独存档在某个位置
    	static目录
        	css文件夹
            js文件夹
            img文件夹
            others文件夹
    
    """
    django后端你之所以能够访问到相应的资源是因为提前开设了相应的接口
    	urls.py  路由层
    """
    STATIC_URL = '/static/'  # 接口前缀
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'static')  # 文件路径
    ]
    静态文件资源动态绑定
    {% load static %}  # 类似于import static
    src={% static 'aaa/a.txt'%}
    
  • 网络请求方法

    # url:统一资源定位符
    GET
    	索要数据
        get请求也可以携带额外的参数但是有大小限制 并且是在url中携带
        	url?xxx=yyy&aaa=bbb
        
    POST
    	提交数据
        post请求一般携带的都是敏感性数据 数据没有大小限制并且存储在请求体
    
  • request对象方法

    request.method  # 纯大写的字符串
    request.POST  # 用户post请求提交的普通数据 
    	.get()
        .getlist()
    request.GET   # 获取url问号后面的数据(不分请求)
    	.get()
        .getlist()
    
  • pycharm链接MySQL

    使用pycharm链接一款之前从来没有链接过的数据库一定要先下载对应的驱动
    针对MySQL的链接pycharm会提供两个驱动 如果一个不行就换另外一个
    
  • django链接MySQL

    1.配置文件中
        DATABASES = {
            ...
            'USER' 'PASSWORD' 'HOST' 'PORT' 'NAME' 'CHARSET' 
        }
    2.针对python3.6及以下解释器还需要添加一个额外的代码
    	import pymysql
        pymysql.install_as_Mariadb()  # 可以直接点出来 不需要过分记忆
    

今日内容概要

  • django orm简介

    可以让你使用面向对象的代码操作MySQL数据库
    
  • orm创建表

    数据库迁移命令  反向迁移
    
  • orm字段增删改查

  • orm记录增删改查

  • orm外键的创建

  • django请求生命周期

今日内容详细

django orm简介

# 什么是ORM?
	ORM:对象关系映射
# 为什么要用ORM?
	能够让不会写SQL语句的python程序员 
    使用面向对象的语法即可简单快捷的操作MySQL,极大地提升开发效率
	'''但是ORM有时候自动生成的SQL效率可能会很低'''

类			表
对象			一行行记录
对象点属性     记录某个字段对应的值
# 如何使用ORM?
	在django应用文件夹下的models.py中操作
  
"""orm无法创建库 需要自己提前创建好"""

orm创建表

"""
强调:只要在models.py中改动了与数据库相关的代码 就必须要重新执行迁移命令
"""

# 1.先在models.py中书写类相关的代码
# 2.执行数据库迁移命令
	python3 manage.py makemigrations # 将改动记到小本本上(migrations)
    python3 manage.py migrate  # 真正操作数据库
    """pycharm快捷提示(tools>>>run manage.py task)"""

补充

1.主键字段orm会自动创建 只不过名字固定为id
2.CharField字段类型必须要有max_length参数

字段增删改查

# 当表中已经有数据存在的情况下如果添加新的字段那么需要设置null或者default
password = models.IntegerField(verbose_name='密码',null=True)  # pwd int comment '密码'
age = models.IntegerField('年龄',default=18)

数据增删改查

# 查
models.User.objects.all()  # 查询user表中所有的数据
	# select * from user;
	<QuerySet [<User: jason>, <User: tony>, <User: kevin>]>
models.User.objects.filter(name='jason')  # 查询name=jason的数据
	# select * from user where name='jason'
    <QuerySet [<User: jason>]>
models.User.objects.filter(name='jason',password=123)
	# select * from user where name='jason' and password=123
    <QuerySet [<User: jason>]>
"""
QuerySet我们可以简单的理解为是列表套一个个数据对象
"""

# 增
models.User.objects.create(name='jerry',password=567)
	# insert into user(name,password) values('jerry',567)
    上述orm返回值为当前被创建出来的数据对象本身
    
obj = models.User(name='tom',password=111)  # 类产生对象
obj.name ='oscar'
obj.save()  # 对象调用save方法保存到数据库

# 改
edit_obj = models.User.objects.filter(id=3)[0]
edit_obj.name = 'kevinSB'
edit_obj.save()

models.User.objects.filter(name='jason').update(name='jasonNB')
	# update user set name='jasonNB' where name='jason';
   
# 删
models.User.objects.filter(id=5).delete()
	# delete from user where id=5;

课堂练习

1.查看当前所有表数据(前端展示)  /home/
2.书写用户注册页面(前端展示)   /register/
3.编辑用户数据
4.删除用户
"""
重在思路
"""

orm外键创建

一对多外键关系  
	"""在orm中 外键字段建在多的一方"""
多对多外键关系
	"""在orm中 可以直接写在查询频率较高的表中(自动创建第三张表)"""
一对一外键关系
	"""在orm中 直接写在查询频率较高的表中"""
    
# 一对多
    publish = models.ForeignKey(to='Publish')
# 多对多
    authors = models.ManyToManyField(to='Author')  # 自动创建书籍和作者的第三张关系表
# 一对一
    author_detail = models.OneToOneField(to='AuthorDetail')
    
"""
ForeignKey OneToOneField  会自动给字段加_id后缀
"""
class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    # 一对多
    publish = models.ForeignKey(to='Publish')
    # 多对多
    authors = models.ManyToManyField(to='Author')  # 自动创建书籍和作者的第三张关系表

class Publish(models.Model):
    title = models.CharField(max_length=32)

class Author(models.Model):
    name = models.CharField(max_length=32)
    # 一对一
    author_detail = models.OneToOneField(to='AuthorDetail')

class AuthorDetail(models.Model):
    addr = models.CharField(max_length=32)
    phone = models.BigIntegerField()
posted on 2022-03-02 23:32  Henrywuovo  阅读(56)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3