zoukankan      html  css  js  c++  java
  • 浅谈ORM操作

    2. ORM(对象关系映射)
    1. 映射的关系

    DB ORM

    数据表 <--> 类
    数据行 <--> 对象
    字段 <--> 属性
    2. Django项目使用MySQL数据库
    1. 手动创建数据库
    2. 配置数据库的连接信息
    settings.py 配置 DATABASES 这个配置项
    3. 用pymysql代替默认的MySQLdb
    在settings.py同目录下的__init__.py文件中
    import pymysql
    pymysql.install_as_MySQLdb()
    4. models.py中创建模型(类)
    5. 执行两条命令
    1. python manage.py makemigrations --> 将models.py中的改动登记到小本本上
    2. python manage.py migrate --> 将改动翻译成SQL语句,去数据库执行
    3. 数据库的表之间的关系
    1. 外键(ForeignKey) --> 一对多(多对一)
    2. 多对多(ManyToManyField) --> 通过第三张表建立多对多的关系

    4. 数据库的操作(增删改查)
       1. 单表操作:
    1. models.类名.objects.all() --> 查所有
    2. models.类名.objects.get(id=1) --> 根据id查单条数据

    3. models.类名.objects.get(id=1).delete() --> 删除单条数据

    4. 修改
    obj = models.类名.objects.get(id=1)
    obj.name = "新名字"
    obj.save()

    5. 新增
    models.类名.objects.create(name="张曌")
    2. 外键的操作

    # 书籍
    class Book(models.Model):
    id = models.AutoField(primary_key=True) # 自增的主键
    title = models.CharField(max_length=32) # 书籍名称 varchar(32)
    publisher = models.ForeignKey(to=Publisher) # 外键关联Publisher这张表

    book_obj 代表书的对象
    book_obj.publisher 代表和我关联的出版社对象
    book_obj.publisher.name 代表和我关联的出版社对象的名字


    3. 多对多的操作
    # 作者表
    class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=16)
    # ORM创建多对多字段,会自动在数据库中创建第三张表
    books = models.ManyToManyField(to=Book)

    author_obj --> 一个作者对象

    author_obj.books.all() --> 作者出版的所有书(书籍对象的列表)
    author_obj.books.set([1,2,3])--> 设置作者关联的书籍(更新的是第三张表)

    第二种方式建造多对多关系的表,手动建第三张表




    自己总结:
    常用字段:
    AotuField:会自动生成id的列
    IntegerField:整数
    CharField:字符类型,必须提供max_length参数
    DateField: 日期字段 日期格式为 YYYY--MM--DD
    DateTimeField: 日期时间字段 格式为:YYYY--MM--DD HH-MM-SS


    字段参数null
    可以表示某个字段为空
    unique:唯一的
    db_index:如果db_index=True,代表此字段设置索引
    default:为该字段设置默认值
    auto_now_add=True 创建数据记录的时候会把当前时间添加到数据库中

    auto_now=True 每次更新数据记录时会更新该字段


    on_delete
    models.CASCADE:代表删除关联数据,与之关联的也删除

    models.DO_NOTHING
    删除关联数据,引发错误IntegrityError


    models.PROTECT
    删除关联数据,引发错误ProtectedError


    models.SET_NULL
    删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)


    models.SET_DEFAULT
    删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)


    models.SET

    删除关联数据,
    a. 与之关联的值设置为指定值,设置:models.SET(值)
    b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)


    to_field 设置要关联的表的字段

    def func():
    return 10

    class MyModel(models.Model):
    user = models.ForeignKey(
    to="User",
    to_field="id",
    on_delete=models.SET(func)
    )  

    db_constraint   在数据库中创建外键约束,默认为True









































































  • 相关阅读:
    HDU6768 The Oculus(Hash)
    HDU6672 Lead of Wisdom(爆搜)
    外一章
    深度学习笔记一
    ACM International Collegiate Programming Contest, Arab Collegiate Programming Contest 2013
    python局部变量&全局变量
    每日日报
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/zhaoweihang/p/9204224.html
Copyright © 2011-2022 走看看