Django3.2的ORM增删改查

本文介绍了如何使用Django ORM进行数据库操作,包括创建数据库、配置连接、创建与管理模型(如添加、删除表及字段),以及基本的增删改查操作。通过实例演示了如何在app01应用中创建User和Department表,并展示了如何在views.py中执行CRUD操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

14.2ORM

ORM可以帮助我们做两件事

  • 创建,修改,删除数据库中的表(不用你写SQL语句)
  • 操作表中的数据(不用写SQL语句)

14.2.1创建数据库

create database gx_day15 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

14.2.2django连接数据库

settings.py文件中

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'gx_day15',
        'USER':'root',
        'PASSWORD':"123456",
        "HOST":"127.0.0.1",
        "PORT":"3306"
    }
}

14.2.3django操作表

  • 创建表
  • 删除表
  • 修改表

1.创建表:在app01/models.py文件中

from operator import mod
from django.db import models

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

执行命令:

python manage.py makemigrations
python manage.py migrate
注意:app需要提前注册

2.添加表

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

class Role(models.Model):
    caption=models.CharField(max_length=16)

再次执行命令:

python manage.py makemigrations
python manage.py migrate

3.删除表

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

#class Role(models.Model):
#    caption=models.CharField(max_length=16)

再次执行命令:

python manage.py makemigrations
python manage.py migrate

4.删除表的字段

from operator import mod
from django.db import models

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

再次执行命令:

python manage.py makemigrations
python manage.py migrate

5.增加表的字段

from operator import mod
from django.db import models

# Create your models here.
class UserInfo(models.Model):
    name=models.CharField(max_length=32)
    password=models.CharField(max_length=64)
    #age=models.IntegerField()
    # 1.没有默认值增加字段
    # 执行命令会出现选项1和选项2,选择选项1,输入默认值
    size=models.IntegerField()
    # 2.有默认值增加字段
    age=models.IntegerField(default=2)
    # 3.增加字段允许内容为空
    data=models.IntegerField(null=True,blank=True)

再次执行命令:

python manage.py makemigrations
python manage.py migrate

15.orm增删改查

urls.py

from django.contrib import admin
from django.urls import path
from app01 import views

urlpatterns = [
    path('orm/', views.orm),
]

views.py

#第一种引入方式,指定引入
from app01.models import Department,UserInfo
#第二种引入方式,引入全部
#from app01 import models
from django.shortcuts import render,HttpResponse,redirect
def orm(request):
    # Department.objects.create(title="销售部")
    # Department.objects.create(title="IT部")
    # Department.objects.create(title="运营部")
    #1.新建
    UserInfo.objects.create(name="test",password="123456",age=20)
    
    #2.删除
    UserInfo.objects.filter(id=1).delete()
    UserInfo.objects.all().delete()

    #3.获取数据
    #data_list=[对象,行,行] QuerySet类型
    data_list=UserInfo.objects.all()
    for obj in data_list:
        print(obj.id,obj.name,obj.password,obj.age)
    
    # 4.更新数据
    UserInfo.objects.filter(id=1).update(age=999)
   
    return HttpResponse("成功")

models.py

from operator import mod
from django.db import models

class UserInfo(models.Model):
    name=models.CharField(max_length=32)
    password=models.CharField(max_length=64)
    age=models.IntegerField(default=2)
   
class Department(models.Model):
    title=models.CharField(max_length=16)

访问127.0.0.1:8000/orm,返回成功

<think>好的,我现在需要解决用户的问题:如何在Django项目之外单独使用Django ORM。用户已经提供了一些引用资料,我需要结合这些资料之前的对话来回答。 首先,用户之前的问题是关于在Django项目内不使用Django ORM的方法,现在转向如何在项目外使用ORM,所以这是一个相反的需求。用户提供的引用[1]、[2]、[3]、[4]都提到了不同的方法,比如配置settings、设置环境变量、导入Django模块等。 我需要整理这些引用中的共同点不同点。例如,引用[1][4]提到配置数据库settings模块,引用[3][4]提到设置环境变量路径。而引用[2]使用setup_environ方法,但根据Django版本的不同,可能有些方法已经过时了。 接下来,我需要确定当前Django的最佳实践。比如,在较新的版本中,可能需要使用django.setup()而不是setup_environ。同时,需要确保正确配置数据库连接,避免出现导入错误或数据库访问问题。 然后,我需要将这些步骤分点说明,确保用户能够按照步骤操作。可能包括设置环境变量、配置数据库、初始化Django等。同时,要提到注意事项,比如模型注册、版本兼容性、路径问题等。 还需要考虑用户可能的疑问,比如如何定义模型,是否需要完整的Django项目结构,如何处理迁移等问题。在回答中应该涵盖这些方面,或者通过相关问题引导用户进一步了解。 最后,要检查是否有遗漏的步骤,比如是否需要安装Django,是否需要设置INSTALLED_APPS包含相关应用等。确保用户能够顺利地在独立脚本中使用ORM。</think>在非Django项目中单独使用Django ORM,需完成以下核心配置步骤(以Django 3.2+为例): ### 一、基础环境搭建 1. **创建独立目录结构**(示例): ``` /my_project ├── standalone_orm.py # 脚本文件 ├── db.sqlite3 # 数据库文件 └── mymodels/ # 模型模块 ├── __init__.py └── models.py ``` 2. **安装必要依赖**: ```bash pip install django psycopg2 # 根据数据库类型选择驱动 ``` ### 二、关键配置实现 ```python import os import sys import django # 1. 路径配置(核心) BASE_DIR = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, BASE_DIR) # 将当前目录加入Python路径 # 2. 环境变量设置(必须前置) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dummy_settings") # 3. 动态创建虚拟settings from django.conf import settings if not settings.configured: settings.configure( DATABASES={ &#39;default&#39;: { &#39;ENGINE&#39;: &#39;django.db.backends.sqlite3&#39;, &#39;NAME&#39;: os.path.join(BASE_DIR, &#39;db.sqlite3&#39;), } }, INSTALLED_APPS=[&#39;mymodels&#39;], # 必须包含模型所在模块 TIME_ZONE=&#39;UTC&#39;, USE_TZ=True ) # 4. 初始化Django django.setup() # 5. 导入模型(必须在django.setup()之后) from mymodels.models import Book ``` ### 三、模型定义规范 `mymodels/models.py`示例: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=200) isbn = models.CharField(max_length=13, unique=True) class Meta: app_label = &#39;mymodels&#39; # 必须显式声明 ``` ### 四、数据库操作示例 ```python # 创建(替代迁移) from django.db import connection with connection.schema_editor() as schema_editor: schema_editor.create_model(Book) # 增删改查操作 book = Book.objects.create(title="Python编程", isbn="9787111553077") results = Book.objects.filter(title__contains="Python") ``` ### 五、注意事项 1. **模型注册限制**: - 必须通过`app_label`显式声明所属应用 - 每个模型模块需要`__init__.py`文件 2. **版本适配**: - Django 1.7+ 必须使用`django.setup()` - 旧版本可用`setup_environ`(已弃用) 3. **迁移替代方案**: - 使用`connection.schema_editor`手动执行DDL - 或通过`python -m django makemigrations`生成迁移文件后,复制到脚本目录 4. **连接池管理**: ```python from django.db import connections connections.close_all() # 显式关闭连接 ``` ### 六、典型应用场景 1. 数据分析脚本需要复用现有Django模型 2. 批量数据迁移工具开发 3. 与Flask等框架混合使用时的数据层共享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce-li__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值