1.安装mysqlclient
打开pycharm,个人习惯在终端下载
pip install mysqlclient
2.ORM
ORM(Object-Relational Mapping,对象关系映射)的主要作用是简化数据库操作,让开发者可以用面向对象的方式操作数据库,而无需直接编写 SQL 语句。
注意:ORM 通常无法直接创建数据库,只能操作数据库中的表。数据库需要提前手动创建或通过其他工具创建。
1.手动创建数据库
create database Django_test_2 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
2.django连接数据库
首先找到项目中settings.py文件中的DATABASES部分,将其注释掉
将下面的代码复制上去
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Django_test_2', # 数据库名字
'USER': 'root',
'PASSWORD': '123456', # 你的MySQL密码
'HOST': '127.0.0.1', #本机
'PORT': 3306,
}
}
3.django操作表(创建、删除、修改)
创建
在app01(你创建的app名称)文件夹下的models.py文件,写一个类
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
解释:Django 会根据模型生成类似以下的 SQL 语句:
CREATE TABLE UserInfo (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(32) NOT NULL,
password VARCHAR(64) NOT NULL,
age INT NOT NULL
);
确保app已经注册
在pycharm终端依次执行下面两个命令来创建表
python manage.py makemigrations
python manage.py migrate
我依次输入了两个命令,但终端实现的两个命令的输出信息重叠了,但可以看出结果创建成功了
mysql中显示创建成功:
从 show tables; 的结果可以看出,当前数据库 Django_test_2 中有多张表,app01_userinfo是我们想创建的表,其他的是 Django 默认自动生成的系统表(可以先不用管)。
再创建两个表
class Department(models.Model):
name = models.CharField(max_length=64) # 部门名称
create_time = models.DateTimeField(auto_now_add=True) # 自动记录创建时间
class Employee(models.Model):
name = models.CharField(max_length=32) # 员工姓名
department = models.ForeignKey(Department, on_delete=models.CASCADE) # 关联部门(外键)
salary = models.IntegerField() # 工资(整数)
hire_date = models.DateField() # 入职日期
运行那两条命令
创建成功
删除
如果想删除某些表,直接把对应表的class注释掉,然后再在终端运行那两条命令,例如删除app01_employee 表
删除成功
修改
当表中删除列时
例如删除create_time
直接把这一行代码注释掉或删掉
然后再运行那两条命令
删除那一列成功
当表中新增列时
例如新增create_time
运行python manage.py makemigrations命令
如果表中已有数据,Django 会提示你选择如何处理新增字段的默认值:
有下面三种解决方式:
- 输入
1
,然后输入一个默认值 - 在模型中设置
default=xxx
from django.utils import timezone create_time = models.DateTimeField(default=timezone.now)
- 允许字段为空
create_time = models.DateTimeField(null=True, blank=True)
学习:【最新Python的web开发全家桶(django+前端+数据库)-哔哩哔哩】 https://b23.tv/01F6vr5