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_TZTrue。但是我这里只会有一个时区,所以我设置为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")

 

posted @ 2025-05-13 17:29  luckylemon  阅读(191)  评论(0)    收藏  举报