0.准备工作
ORM向用户提供方法,并向下在方法中用SQL语句去操作数据库。
安装第三方模块mysqlclient
pip install mysqlclient
如果速度太慢可以指定代理
pip install mysqlclient -i https://pypi.mirrors.ustc.edu.cn/simple
1.创建数据库
由于ORM不支持自动创建数据库,因此需要自己手动创建一个数据,在此不做赘述
2.Django连接数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'mysite', # 数据库名字
'USER': 'root',
'PASSWORD': '12345678',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
如上修改settings.py
中的DATABASES
字段的内容
3.Django操作表
创建表
在models.py
中
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
该代码类似于如下的SQL建表语句:
create table app01_userinfo(
id bigint auto_increment primary key,
name varchar(32),
password varchar(64),
age int
);
在pycharm的terminal中运行如下指令:
python manage.py makemigrations
python manage.py migrate
如下图所示,则创建表成功
由于建表操作是从已注册的APP中去依次寻找models.py去建表,因此会产生许多默认提供的数据表。
可以采取以下操作,指定APP建表。
python manage.py makemigrations
python manage.py migrate APP的名字
删除表
当从models.py
中将建表语句注释或删除后,再运行以下操作
python manage.py makemigrations
python manage.py migrate
即可删除表
已有表添加字段
在models.py
中增加字段即可,但注意此时会提示两个选项
-
- 提供一个默认值
-
- 在代码中手动设置默认值
- 附加方法:允许字段的值为空
插入数据
在views.py
中演示:
def orm(request):
from app01.models import Department, UserInfo
# 新建数据 insert into app01_department(title) values("销售部")
Department.objects.create(title="销售部")
Department.objects.create(title="IT部")
Department.objects.create(title="运营部")
UserInfo.objects.create(name="lisi", password="123", age=19)
return HttpResponse("成功")
删除数据
在views.py
中演示:
# 删除数据
UserInfo.objects.filter(id=1).delete() # 删除id=1的数据
Department.objects.all().delete() # 全部删除
查询数据
在views.py
中演示:
# 获取数据
data_list = UserInfo.objects.all() # 查全,获取列表(QuerySet类型)返回
print(data_list)
不难发现这个data_list
中存放的是一个个的UserInfo对象,这个对象中封装了对应的字段值。
取出数据:
for obj in data_list:
print(obj.id, obj.name, obj.password, obj.age)
亦或者采取以下方法:
row_obj = UserInfo.objects.first() # 取第一条记录【对象】
print(row_obj.id, row_obj.name, row_obj.password, row_obj.age)
更新数据
# 更新数据
UserInfo.objects.all().update(password=999)
UserInfo.objects.filter(id=2).update(password=123)