Django学习笔记
Django和Mysql数据库
Django开发操作数据库更简单,内部提供了ORM框架。
1)安装mysqlclient
pip3 install mysqlclient
2)ORM
ORM可以帮助我们做两件事:
1.创建、修改、修改数据库中的表(不用写sql语句)[不能创建数据库]
2.操作表中的数据(不用写sql语句)
3)创建数据库
create database database_name;
4)配置Django连接数据库
修改settings.py文件
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', #数据库类型'NAME': 'helloWorld', #数据库名称'USER': 'root', #数据库用户名'PASSWORD': 'xxxx', #数据库密码'HOST': 'xxx.xxx.xxx.xxx', #数据库主机地址'PORT': '33060', #数据库端口号}
}
5)在modeles.py中创建一个用于生成表的类
from django.db import models# Create your models here.
class userInfo(models.Model): #这个类用于生成表name = models.CharField(max_length=32) #定义name字段password = models.CharField(max_length=16) #定义password字段age = models.IntegerField() #定义age字段"""
Django执行上面这个类的时候,相当于执行了建表操作(新建的表名为“app名_类名”),相当于以下代码:
create table app1_userinfo(id bigint auto_increment primary key, name varchar(32),password varchar(16),age int)
"""
6)创建表,将数据自带表迁移到数据库中
python manage.py makemigrations #生成迁移文件
python manage.py migrate #进行迁移
迁移完后,在数据库中应该可以看到一些django的表
注意:
如果不执行迁移,那么在使用的时候,有些数据需要存到自带的表中,那么就会报错。
这样就可以看到数据库中已创建好了一张表
如果要删除表,只需要把models.py中的类删除,重新执行表迁移就可以。
如果要修改表,只需要修改models.py中的类,重新执行表迁移就可以。
注意:
在新建 的表中会自动增加一个ID字段,并且为auto_increment 和primary key
如果在表中增加了新字段,进行迁移的时候会有两个选项:
选项1 :手动指定一个默认值;
选项2:退出,可以在类中将将新增字段添加一个默认值;
如:
six=models.CharField(max_length=4,defalut=l)
或者设置新增字段允许为空
six=models.CharField(max_length=4,null=True,blank=True)
1.13操作数据
1)新增记录
from app1 import models #引入models模块
models.<class_name>.objects.create(<field1>=<value>,<field2>=<value>.....)#相当于以下sql语句
#insert into <table_name> (<field1>,<field2>...) values(<value1>,<value2>.....)
2)删除记录
models.<class_name>.objects.filter(条件).delete() #删除满足条件的数据
models.<class_name>.objects.all.delete() #删除表中所有的数据
3)查询数据
data_list1 = models.<class_name>.objects.all() #获取表中的所有数据QuerySet类型
for row in data_list1: #遍历所有数据print(row.<field>) #获取指定字段的数据
data_list2 = models.<class_name>.objects.filter(条件) #获取满足指定条件的数据
4)修改数据
#修改所有记录的指定字段值
models.<class_name>.objects.all().update(<field>=<new value>)
#修改符合条件的记录的指定字段值
models.<class_name>.objects.filter(条件).update(<field>=<new value>)