Python3 Django的Model详解

本文详细介绍了Python3 Django的Model使用,包括更换数据库至MySQL,Model定义与字段设置,管理器Manager,查询集操作,事务处理以及部分省市区数据。适合Django初学者和进阶者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python3 Django的Model详解


本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.youkuaiyun.com/Rozol/article/details/79526259


以下代码以Python3.6.1为例
Less is more!
Python 3.6.1
Django 1.8.2 (注: 由于2.0.2不支持mysql, 改用该版本)
MySQL 5.0.27
PyMySQL 0.8.0 (注: Django2推荐使用mysqlclient 1.3.7+, 该库要求python5.5-5.7 and Python2.7, 3.4+)(我装的是5.0的MySQL, 所以就没装推荐的)
项目名: Django_model 应用名: booktest

准备

  • 更换成mysql数据库, 首先需要准备好数据库
    • 安装数据库: 略
    • 进入数据库: mysql -uroot -p
    • 创建数据库: CREATE DATABASE test1 CHARSET=utf8;

更换数据库

  • 虚拟环境中安装数据库MySQL: pip install pymysql

    • Django_model[项目名]/Django_model/__init__py中书写:

        import pymysql
        pymysql.install_as_MySQLdb()
      
  • 修改settings.py文件

     DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.mysql',   # postgresql / mysql / sqlite3 / oracle
             'NAME': 'model',  # 数据库名
             'USER': 'root',
             'PASSWORD': 'root',
             'HOST': 'localhost',  # 本地:localhost
             'PORT': '3306',  # 默认端口:3306
         }
     }
    

Model使用流程

  • 创建应用python manage.py startapp [应用名]
  • settings.py中的 INSTALLED_APPS = [] 添加应用
  • models.py定义模型类
  • 生成迁移python manage.py makemigrations
  • 执行迁移python manage.py migrate
  • 使用模型

字段

from django.db import models

'''
A. 属性的类型决定了:
    1. 数据库中字段的类型
    2. 管理表单时使用的html控件
    3. 管理中的数据验证
B. Django会自动生成自增长id
'''
'''
字段类型:
    AutoField: 无需指定, 自增长id
    BooleanField: Boolean类型, 默认Flase; 表单控件: CheckboxInput
        NullBooleanField; Boolean类型, 支持None, True, False
    CharField(max_length=字符长度20): 字符串; 表单控件: TextInput
        TextField: 大文本; 表单控件: Textarea
    IntegerField:整数
    FloatField: 浮点数
        DecimalField(max_digits=位数总数None, decimal_places=小数点后的数字位数None): Decimal的十进制浮点数
    DateTimeField([auto_now=修改时间戳False, auto_now_add=创建时间戳False]): datetime.datetime实例的日期和时间; 表单控件: TextInput + 日历控件
        DateField: datetime.date实例的日期
        TimeField: datetime.time实例的时间
    FileField: 上传文件(非路径)
        ImageField:上传image
'''
'''
字段选项:
    null: True:允许None; 默认:False
    blank: True:允许空白; 默认:False
    db_column: 字段名; 默认:属性名
    db_index: True:创建索引; 默认:False
    default: 默认值
    primary_key: True:主键
    unique: True:值唯一
'''
'''
关系:
    ForeignKey: 一对多, 将该属性定义到多的那一端
    OneToOneField: 一对一, 将该属性定义到任一端
    ManyToManyField: 多对多, 将该属性定义到两端
    递归关联(自连接/自关联): 一对多, 用一张表存储所有信息

访问:
    BookshelfInfo
    BookInfo
        bookshelf = models.ForeignKey(Bookshelf)
        
    用一访问多:
        对象.模型类_set
        bookshelf.bookinfo_set
    用一访问一:
        对象.模型类
        book.bookshelfinfo
    访问id:
        对象.属性_id
        book.bookshelf_id

    使用例子:
        bookshelf = Bookshelf.objects.get(pk=1)  # 查询指定书架
        bookshelf.bookinfo_set.all()  # 获取该书架所有的书信息
'''


class Bookshelf(models.Model
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值