Django数据模型

Django将数据库的语法转换成了 Python 的语法形式,我们只要写 Python 代码就可以了,Django 会把 Python 代码翻译成对应的数据库操作语言,提供了一套 ORM(Object Relational Mapping)系统。

一、数据库配置

在settings.py里进行设置
通常,这个配置文件使用 SQLite 作为默认数据库,如果你想使用其他数据库,你需要安装对应数据库,然后改变设置文件中 DATABASES ‘default’ 项目中的一些键值:
ENGINE – 可选值有 ‘django.db.backends.sqlite3’,‘django.db.backends.postgresql’,‘django.db.backends.mysql’,或 ‘django.db.backends.oracle’。其它 可用后端。
NAME – 数据库的名称。如果你使用 SQLite,数据库将是你电脑上的一个文件,在这种情况下,NAME 应该是此文件完整的绝对路径,包括文件名。默认值 BASE_DIR / ‘db.sqlite3’ 将把数据库文件储存在项目的根目录。

二、创建模型

>models.py

from django.db import models
class Category(models.Model):
    name = models.CharField(max_length=100)

Category 就是一个标准的 Python 类,它继承了 models.Model 类,类名为 Category 。Category 类有一个属性 name,它是 models.CharField 的一个实例。
这样,django 就可以把这个类翻译成数据库的操作语言,在数据库里创建一个名为 category 的表格,这个表格的一个列名为 name。还有一个列 id,虽然没有显示定义,但 django 会为我们自动创建。可以看出从 Python 代码翻译成数据库语言时其规则就是一个 Python 类对应一个数据库表格,类名即表名,类的属性对应着表格的列,属性名即列名。

三、激活模型

>python3 manage.py makemigrations polls
>python3 manage.py migrate

迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。我们会在后面的教程中更加深入的学习这部分内容,现在,你只需要记住,改变模型需要这三步:

编辑 models.py 文件,改变模型。
运行 python3 manage.py makemigrations 为模型的改变生成迁移文件。
运行 python3 manage.py migrate 来应用数据库迁移。
数据库迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。

四、字段类型和参数

4.1 字段类型
CharField
字符串字段,必须 max_length 参数max_length = 70
TextField
文本,字符串=longtext
DateTimeField
日期类型 datetime,同DateField的参数
AutoField
自增列= int(11),如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。
DateField
日期类型 date,对于参数,auto_now =True则每次更新都会更新这个时间auto_now_add 则只是第一次创建添加,之后的更新不再改变。
EmailField
字符串类型(正则表达式邮箱)=varchar,对字符串进行正则表达式
FloatField
浮点类型= double
IntegerField
整形
SmallIntegerField
数字,数据库中的字段有:tinyint、smallint、int、bigint 
TimeField
时间 HH:MM[:ss[.uuuuuu]]
URLField
字符串,地址正则表达式
BinaryField
二进制
mageField
图片
FilePathField
文件

4.2 参数
null=True
数据库中字段是否可以为空
blank=True
django的Admin中添加数据时是否可允许空值
primary_key =False
主键,对AutoField设置主键后,就会代替原来的自增 id 列
auto_nowauto_now_add
auto_now 自动创建—无论添加或修改,都是当前操作的时间
auto_now_add 自动创建—永远是创建时的时间
choices
GENDER_CHOICE =(
(u’M’, u’Male’),
(u’F’, u’Female’),
)
gender = models.CharField(max_length=2,choices = GENDER_CHOICE)
max_length
default
默认值
verbose_name
Admin中字段的显示名称
name|db_column
数据库中的字段名称
unique=True
不允许重复
db_index =True
数据库索引
editable=True
在Admin里是否可编辑

五、基础增删查改操作

增:create()

objects.create(name = ‘test’) # 新增name字段的值为test

删:delete()

objects.all().delete() # 删除表中全部数据
objects.get(aa=‘test’).delete() # 删除一条aa等于’test’的数据
objects.filter(aa=‘123’).delete() #过滤出aa字段等于123的都删除

查:all()、get()、filter()

objects.objects.all()
objects.get()
objects.filter(name=name) # 查询匹配条件的多条数据
objects.filter(name__contains=name) # 模糊查询;name为查询的字段名
objects.filter(name__contains=name)[0:5] # [0]显示第一条 [0:2]会显示前两条,切片不支持负数

改:update()

get(id=id).update(name=name)

六、字段关系类型

6.1 多对多 ManyToManyField

6.2 一对一 OneToOneField
插入数据

insert:
a1 = Account.objects.create(username='leeyongbard',password='123')
a1.save()
c1 = Contact.objects.create(address='zh',code='45000',mobile='15735896033',account=a1)
c1.save()

正向查询

a1.contact.address

a1.contact.code

反向查询

c1.account.username
c1.account.password

删除

a1.contact.delete()

删除账户信息,则对应的联系人信息也会被删除

6.3 多对一 ForeignKey

你可能感兴趣的:(Django,django,python)