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')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章