Django 操做Mysql数据库二

Django 设置Mysql 数据库字段的类型:python

  • 经常使用字段的类型 :CharFieldBooleanFieldIntegerFieldTextFiledDateTimeField AutoField
  • 设置默认值:default
  • CharField 必须指定 max_length 长度,不然服务器会报错
  • AutoField 必须设置 primary_key 不然会报错
from django.db import models

# Create your models here.
class UserInfo(models.Model):                   #新建表
    username=models.CharField(max_length=50)    #新建静态字段
    password=models.CharField(max_length=50)    #新建静态字段
    gender=models.BooleanField()                #性别 用布尔类型,0或1 表明男女
    age=models.IntegerField(default=18)                   #年龄 数字类型
    memo=models.TextField(default='xxx')                     #文本类型
    creatdate=models.DateTimeField(default='2016-12-06 16:52')            #时间类型
    
     #ip类型,protocol协议, 能够等于,ipv4,ipv6,both ,不设置,默认为both
    ip = GenericIPAddressField(protocol='both')

Django 操控 Mysql 数据库 表之间的联系 (外键)sql

一、一对多关系数据库

   type=models.ForeignKey('UserType')    django

# django 生成的表外键字段当中, 会自动在 外键字段后面加上 _id ,如 type_id服务器

class UserType(models.Model):                    #主表
    name=models.CharField(max_length=50)

class UserInfo(models.Model):                   #新建表
    username=models.CharField(max_length=50)    #新建静态字段
    password=models.CharField(max_length=50)    #新建静态字段
    gender=models.BooleanField()                #性别 用布尔类型,0或1 表明男女
    age=models.IntegerField(default=18)                   #年龄 数字类型
    memo=models.TextField(default='xxx')                     #文本类型
    creatdate=models.DateTimeField(default='2016-12-06 16:52')            #时间类型
    type=models.ForeignKey('UserType')         #给子表设置外键

注意: 当用 for 循环遍历 userinfo = UserInfo() 内容的时候 --> for raw in userinfo
              raw.type_id  (django 会自动给外键字段加_id) --------> 获得 对应的id 数据
              raw.type   --------------->  返回 UserType 对象 (ID =XXX)
              此时 用 raw.type.name   --------------> 就能够获得 对应外键关系 的名称
app

二、多对多关系spa

     models.ManyToManyField('Group')code

     通常有2 张表,经过第3张表 来创建多对多关系,Django 会自动创建第3张表对象

class Group(models.Model):
    name=models.CharField(max_length=50)
class User(models.Model):
    name=models.CharField(max_length=50)
    Email=models.CharField(max_length=50)
    group_relation=models.ManyToManyField('Group') #多对多关系

三、一对一关系ip

    models.OneToOneField('Group')

特别说明:

当你的数据库不能同步,之前建立过相同的表,后来删除致使 执行migrate 不能新建表的时候

可以使用下面命令解决

python manage.py migrate appname --fake  #appname指你新建的app的名字

此命令还可解决 django.db.utils.OperationalError: (1050, "Table '表名' already exists) 错误

因为Django 查询语法的工做方式,字段名称中连续的下划线不能超过一个

class Example(models.Model):
    foo__bar = models.IntegerField()   #不能定义 foo__bar (两个下划线)
相关文章
相关标签/搜索