Django-ORM基礎操作

ORM操作

  • ORM:操作表:

    • 創建表
    • 修改表( 在SQLAchemy中不能進行修改表操作)
    • 刪除表
  • ORM:操作數據行:

    • 增刪改查
  • 配置


1. 創建數據庫

2. 配置 修改 settings.py
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
# 由於Django內部連接MySQL時使用的是MySQLdb模塊,而python3中還無此模塊,所以需要使用pymysql來代替

# 如下設置放置的與project同名的配置的 __init__.py文件中

3.
    import pymysql
    pymysql.install_as_MySQLdb() 

4.創建類
from django.db import models
class UserInfo(models.Model):
    nid = models.BigAutoField(primary_key=True) # 如果不寫 Django默認添加一列自增列
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

5.在setting.py 裏註冊app

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
]

6. 創建數據庫表
    python manage.py makemigrations
    python manage.py migrate

python manage.py makemigrations:
    讀取類的信息,在migations文件夾裏生成配置文件。
python manage.py migrate:
    拿着makemigrations生成的配置文件去生成數據庫表的語句。




# 增加新的一列
class UserInfo(models.Model):
    nid = models.BigAutoField(primary_key=True)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField() # 增加的一列


➜  task003 git:(master) ✗ python3 manage.py makemigrations
You are trying to add a non-nullable field 'age' to userinfo without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

***新增加的一列要麼 指定爲空 要麼 指定一個默認值
    age = models.IntegerField(default=1)
    # age = models.IntegerField(null=True)


# 創建外鍵

from django.db import models

class UserGroup(models.Model):
    title = models.CharField(max_length=32)

class UserInfo(models.Model):
    nid = models.BigAutoField(primary_key=True)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField(default=1)
    ug = models.ForeignKey('UserGroup',null=True)
    # 在數據庫中 ug 這一列的名字 叫 ug_id



  • 數據庫相關操作:

# 添加
def index2(request):
    from app01 import models
    models.UserGroup.objects.create(title='銷售部')
    models.UserInfo.objects.create(
        username='winter',
        password='ab123456',
        age=22,
        ug_id =1
    )
    return HttpResponse('ok')

# 查找

def index2(request):
    from app01 import models
    group_list = models.UserGroup.objects.all()
    # group_list = models.UserGroup.objects.filter(id=1) # filter 相當於sql語句中的where
    print(group_list)
    for row in group_list:
        print(row.id,row.title)
    return render(request,'index2.html',{'group_list':group_list})

    # 神奇的雙下劃線
    group_list = models.UserGroup.objects.filter(id=1)
    group_list = models.UserGroup.objects.filter(id__gt=1) # 大於
    group_list = models.UserGroup.objects.filter(id__lt=1) # 小於

# 刪除
    models.UserInfo.objects.filter(nid=1).delete()
# 更新
    models.UserGroup.objects.filter(nid=1).update(title='技術部門')



# models.py
class UserType(models.Model):
    title = models.CharField(max_length=32)

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    ut = models.ForeignKey('UserType')



    # 正向操作
    # result = models.UserInfo.objects.all()
    # for row in result:
    #     print(row.id,row.name,row.ut.title)


    # 反向操作
    obj = models.UserType.objects.all().first()
    print(obj.title)
    print('-----')
    for row in obj.userinfo_set.all():
        print(row.name,row.age)



    return HttpResponse('ok')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章