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 (兩個下劃線)
相關文章
相關標籤/搜索