day94-django-ORM操作,创建表

1.ORM操作:
    
        1.创建数据库'db4_16'
        
        2.在settings.py中把django的默认数据库sqlite修改为mysql
            DATABASES = {
                'default': {
                    'ENGINE': 'django.db.backends.mysql',
                    'NAME': 'db4_16',
                    'USER':'root',
                    'PASSWORD':'123',
                    'HOST':'localhost',
                    'PORT':3306
                }
            }
            
        3.在__init__.py中写入以下代码,把MySQLdb(默认)修改为通过pymysql模块来连接数据库
            import pymysql
            pymysql.install_as_MySQLdb()
            
        4.在settings里注册app01
            INSTALLED_APPS = [
                'django.contrib.admin',
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.sessions',
                'django.contrib.messages',
                'django.contrib.staticfiles',
                'app01.apps.App01Config',#注册app01,自动创建,如果需要注册app02,就在下面添加
                'app02'
            ]
            
        5.创建表字段
            在app01的models.py里面写入类,创建字段名nid,username,password
            注意:nid不写也可以,数据库自动创建id(主键自增)。
                from django.db import models

                class UserInfo(models.Model):
                    nid = models.BigAutoField(primary_key=True)
                    username = models.CharField(max_length=32)
                    password = models.CharField(max_length=64)
            
        6.创建数据表,在Terminal终端输入命令:
            python manage.py makemigrations
            python manage.py migrate
            
            注意: django 3.0.5 ,pymysql 0.9.3,输入python manage.py makemigrations
                        出现问题:mysqlclient 1.3.13 or newer is required; you have 0.9.3.
            解决办法:
                    1.cmd安装django2.2:pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ django==2.2
                    2.创建项目的时候勾选Inherit global site-packages(继承全局的site-packages包)
                    3.打开路径C:\Python\Lib\site-packages\django\db\backends\mysql的base.py,
                    把第35和36行注释if version < (1, 3, 13):
                    raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
                    4.打开同样路径的operations.py,把146行的decode修改为encode
                    
                    如果已经使用了django 3.0.5创建了项目,就算后面把版本修改为2.2,还是无法解决问题。
2.#类创建表格,在models中利用类来添加和修改表字段,在views中利用类.对象.方法来做增删改查

2.1 models.py创建表字段

from django.db import models
#类创建表格,在models中利用类来添加和修改表字段,在views中利用类.对象.方法来做增删改查
class UserInfo(models.Model):
    # nid = models.BigAutoField(primary_key=True)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    #设置默认值为1。当表格有数据,新添age会有提示,输入2退出,然后设置default=1或者null=True
    age = models.IntegerField(default=1)
    #设置为空
    # age = models.IntegerField(null=True)
    #设置外键
    ug = models.ForeignKey('UserGroup',null=True,on_delete=None)

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

class UserInfo2(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    ut = models.ForeignKey('UserType',null=True,on_delete=None)

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


2.2 views.py表的增删改查

from django.shortcuts import render, HttpResponse
from app01 import models
from django.core.paginator import Paginator

def index(request, a1):
    # 增,ug在数据库被更名为ug_id
    create = models.UserInfo.objects.create(username='tom', password='111', age=18, ug_id=1)

    #
    delete = models.UserInfo.objects.filter(id=4).delete()

    #
    update = models.UserInfo.objects.filter(id=5).update(username='alex')

    # 查全部,结果是列表,列表里的每一个对象就是一行,for循环取值
    select_all = models.UserInfo.objects.all()
    print(select_all)  # [<UserInfo: UserInfo object (5)>, <UserInfo: UserInfo object (6)>]
    for row in select_all:
        print(row.id, row.username, row.password, row.age, row.ug_id)
    # 查一行
    select_one = models.UserInfo.objects.filter(id=6)
    print(select_one)  # [<UserInfo: UserInfo object (6)>]
    # 查出id大于1
    select1 = models.UserInfo.objects.filter(id__gt=1)
    # 查出id小于7
    select2 = models.UserInfo.objects.filter(id__lt=7)
    return render(request, 'index.html', {'create': create, 'select_all': select_all})



猜你喜欢

转载自www.cnblogs.com/python-daxiong/p/12738544.html