django 数据库操作

数据库操作

www.bilibili.com/video/BV1mj...

1.mysql下载

dev.mysql.com/downloads/f...

  • mysql +pymysql

django操作数据库更简单,内部提供ORM框架。

复制代码
pip install mysqlclient

ORM可以做下面2件事:

  • 创建、修改、删除表

  • 操作表内容

2.创建数据库

手动创建

3.django链接数据库

settings.py

默认是

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

mysql的:

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django42',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    }
}

会报错,原因是最新的只支持8.0以上版本的mysql

cmd 复制代码
(django42) PS C:\Users\jianj\PycharmProjects\djangoProject> python manage.py makemigrations 
Traceback (most recent call last):
  File "C:\Users\jianj\PycharmProjects\djangoProject\manage.py", line 22, in <module>
.
.
.
.
.
.
File "I:\miniconda3\envs\django42\Lib\site-packages\django\db\backends\base\base.py", line 239, in init_connection_state
    self.check_database_version_supported()
  File "I:\miniconda3\envs\django42\Lib\site-packages\django\db\backends\base\base.py", line 214, in check_database_version_supported
    raise NotSupportedError(
django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.17).

改用最新版mysql成功。

bash 复制代码
(django42) PS C:\Users\jianj\PycharmProjects\djangoProject> python manage.py makemigrations
Migrations for 'app01':
  app01\migrations\0001_initial.py
    - Create model UserInfo
cmd 复制代码
(django42) PS C:\Users\jianj\PycharmProjects\djangoProject> python manage.py migrate
Operations to perform:
  Apply all migrations: admin, app01, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK

4.增加表

models.py进行修改

ini 复制代码
from django.db.models import *


# Create your models here.
class UserInfo(Model):
    name = CharField(max_length=32)
    password = CharField(max_length=64)
    age = IntegerField()


class Department(Model):
    title=CharField(max_length=16)

class Role(Model):
    title=CharField(max_length=16)

再执行

rust 复制代码
app01_department
app01_role
app01_userinfo
auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session

就是修改完毕就得再执行makemigrations 、migrate

修改表新增列需要设置默认值,或者在models.py里直接写 default=xxx

5.操作表数据

python 复制代码
  # 1.增加
    UserInfo.objects.create(name="韩梅梅", password="123456", age=18)
    UserInfo.objects.create(name="韩梅梅", password="123456", age=18)
    UserInfo.objects.create(name="韩梅梅", password="123456", age=18)
    Department.objects.create(title="技术部")
    Department.objects.create(title="技术部")
    Department.objects.create(title="技术部")
    Role.objects.create(title="开发工程师")
    Role.objects.create(title="开发工程师")
    Role.objects.create(title="开发工程师")
    # 2.删除
    UserInfo.objects.filter(id=3).delete()
    UserInfo.objects.all().delete()
    # 3.获取数据
    datalist = Department.objects.all()
    print(datalist)
    for obj in datalist:
        print(obj.id, obj.name, obj.password, obj.age)
    # 4.获取一条数据
    obj = Role.objects.filter(id=1).first()
    print(obj.id, obj.name, obj.password, obj.age)
    # 5.更新数据
    Department.objects.all().update(title="开发部")
    Department.objects.filter(id=2).update(title="技术部")
相关推荐
雨落倾城夏未凉1 分钟前
9.c++new申请二维数组
c++·后端
二闹4 分钟前
后端的请求体你选对了吗?
后端
lichenyang45327 分钟前
Mongodb(文档数据库)的安装与使用(文档的增删改查)
后端
雨落倾城夏未凉29 分钟前
8.被free回收的内存是立即返还给操作系统吗?为什么?
c++·后端
数新网络29 分钟前
LevelDB 辅助工具类
后端
Code_Artist31 分钟前
[Go]结构体实现接口类型静态校验——引用类型和指针之间的关系
后端·面试·go
onejason32 分钟前
《利用 Python 爬虫获取 Amazon 商品详情实战指南》
前端·后端·python
雨落倾城夏未凉32 分钟前
6.new和malloc的区别
c++·后端
程序员清风1 小时前
跳表的原理和时间复杂度,为什么还需要字典结构配合?
java·后端·面试
用户298698530141 小时前
C#合并/拆分PDF文档的3种方法(Spire.PDF实战示例)
后端