Django 操作使用MySQL
1.在Django项目中的settings.py添加字段
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'pythondb', # 数据库名
'USER': 'root', # 连接MySQL用户名
'PASSWORD': '123456', # 密码
'HOST': '127.0.0.1', # 主机名
'PORT': '3306', # 端口号
}
}
2.在创建的app中的models.py创建类
from django.db import models
class PythonUser(models.Model):
email = models.CharField(max_length=100, null=True, blank=True)
pwd = models.CharField(max_length=100, null=True, blank=True)
phone = models.CharField(max_length=11, null=True, blank=True)
nickname = models.CharField(max_length=50, null=True, blank=True)
join_time = models.DateTimeField(auto_now_add=True)
# auto_now_add=True 自动添加当前时间
age = models.IntegerField(default=0)
img = models.ImageField(upload_to="upload/", default="static/upload/a.jpg", max_length=100)
# upload_to 图像上传地址
# 等级
vip = models.IntegerField(default=0, null=True, blank=True)
- 其中app名_pythonuser 为数据库的表名, email、pwd、phone、nickname、join_time、age、img、vip为表的列名,并且在创建生成数据库表后,会默认新增一列为id列。
- max_length=100 表示列的最大长度为100;
- null=True, blank=True 表示插入数据时,列的数据可以为空;
- auto_now_add=True 表示将插入数据时的当前时间,插入数据库表中;
- auto_now=Ture,字段保存时会自动保存当前时间,但要注意每次对其实例执行**save()**的时候都会将当前时间保存,也就是不能再手动给它存非当前时间的值;
- auto_now_add=True,字段在实例第一次保存的时候会保存当前时间,不管你在这里是否对其赋值。但是之后的save()是可以手动赋值的。也就是新实例化一个model,想手动存其他时间,就需要对该实例save()之后赋值然后再save();
- default=0 表示默认为0。
3.在settings.py文件所在目录下的__init__.py文件中添加代码语句
# 用pymysql替换django默认的mysqlclient
import pymysql
pymysql.install_as_MySQLdb()
4.在命令行Terminal执行命令
python manage.py makemigrations 将类转换成sql相关语句
python manage.py migrate 生成表
- 注意会默认在app目录下创建migrations包,生成sql语句;
- 如果修改models.py中类的代码,则需要重新执行上面两句命令,重新生成表。
5.在django中使用orm操作数据库
- orm:即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。
(1)查询数据
- 根据字段查询数据是否在数据库中,类名是models.py中创建的类名。
users = 类名.objects.filter(列名=数据的值)
# 查询的数据users可能是多个或者一个或者没有查询到,如果没有查询到数据,服务不会报错
user = 类名.objects.get()
# 查询的数据只能是一个,如果查询的数据不存在,服务会报错
users = 类名.objects.all()
# 查询所有数据
(2)插入数据
user = 类名()
user.列名 = 要插入的数据的值
user.save()
(3)删除数据
类名.objects.filter(列名=值).delete() # 删除对应数据
类名.objects.all().delete() # 删除表中的所有数据
(4)更新数据
类名.objects.filter(列名=值).update(要修改的列=修改的值)
# 修改对应数据的值
类名.objects.all().update(要修改的列=修改的值)
# 修改所有数据的值
转载:https://blog.csdn.net/weixin_45459224/article/details/101032813
查看评论