Django连接Mysql数据库并操作
#先安装官方推荐的mysqlclient
pip install mysqlclient
1.Django时区设置和Mysql时区设置一致
将django时区改为系统时间:
在Django中,可以通过设置TIME_ZONE来指定项目的默认时区。将Django的时区设置为系统时间(即服务器所在的时区),可以在Django项目的settings.py文件中进行如下设置:
TIME_ZONE = 'Asia/Shanghai'
设置了TIME_ZONE,但如果USE_TZ设置为False,Django将不会对数据库中的时间进行时区转换。为了确保Django正确处理时区,应该保持USE_TZ为True。但是我这里只会有一个时区,所以我设置为False
USE_TZ = False
查看数据库时区
SHOW VARIABLES LIKE '%time_zone%';
2.创建数据库并检查是否创建成功
create database mydata default character set utf8;
SHOW DATABASES;
3.修改settings.py文件中数据库的配置,将默认的sqlite3配置注释掉,改为mysql的
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #django连接mysql 'NAME': 'mydata', #数据库名字 'USER':'root', #用户 'PASSWORD':'123456', #密码 'HOST':'127.0.0.1', #主机 'PORT':'3306', #端口 } }
4.创建一个用户表
在应用的models文件中,每新建一个类,就是创建一张表,类需继承models类
from django.db import models #应用名_小写类名代替表名,字段名代表列名 class UserInfo(models.Model): #继承models类 id = models.AutoField(primary_key=True) username = models.CharField(max_length=32,verbose_name="用户名",help_text="姓名") userid = models.IntegerField(unique=True,max_length=10)#用户id有唯一性 password = models.CharField(max_length=64) registrationdate = models.DateTimeField(auto_now_add=True)#注册日期时间 lastlogindate = models.DateTimeField(auto_now=True)#最后一次登录日期时间 role = models.CharField(max_length=64)#角色 permissions = models.CharField(max_length=64)#权限
要在数据库中新建这个表要执行以下命令(新建删除修改字段,删除表等对表结构操作的都需要执行)
python manage.py makemigrations #为模型的更改创建迁移文件
python manage.py migrate#执行迁移
每个应用下都有个migrations文件夹,里面记录的当前应用下的models.py文件中模型类执行makemigrations 发生变化产生的文件,多人协作的时候可以加入版本控制
show tables;
desc demo_userinfo;
在views.py视图中就可以引用并操作数据库表数据了
from demo.models import UserInfo
#获取所有数据对象
UserInfo.objects.all()
#数据库插入一条数据
UserInfo.objects.create(username="yy",userid=10001,password="88888888",role="admin",permissions="admin")
#根据条件筛选并删除数据
UserInfo.objects.filter(id=2).delete()
#筛选更新数据
UserInfo.objects.filter(id=1).update(lastlogindate=datetime.now())
print(datetime.now())
#获取一条符合条件的数据并得到某个字段的值
UserInfo.objects.get(userid=10001).username
#筛选得到数据对象,遍历对象,得到username,和userid为key的字典,不指定字段则字典包含所有字段和值的键值对
UserInfo.objects.filter(id=1).values("username","userid")
#得到("yy",10001)的元组,不指定字段则元组包含所有字段的值
UserInfo.objects.filter(id=1).values_list("username","userid")

浙公网安备 33010602011771号