Django cursor()增删改查和shell环境执行脚本

在Django中,cursor()方法是DatabaseWrapper对象(由django.db.connectio提供)的一个方法,用于创建一个游标对象。这个游标对象可以用来执行SQL命令,从而实现对数据库的增删改查操作。

查询(Select)

使用cursor.execute()方法执行SQL查询语句,可以获取数据库中的数据。查询your_table表中的所有记录。执行查询后,你可以使用cursor.fetchall()或cursor.fetchone()等方法来获取查询结果。

复制代码
cursor.execute("SELECT * FROM your_table")

插入(Insert)

使用cursor.execute()方法执行SQL插入语句,可以向数据库中添加新的记录。插入一条新记录。这里%s是占位符,execute()方法的第二个参数是一个列表,包含了要插入的值。

复制代码
cursor.execute("INSERT INTO your_table (column1, column2) VALUES (%s, %s)", [value1, value2])

更新(Update)

使用cursor.execute()方法执行SQL更新语句,可以修改数据库中已存在的记录。例如,你可以使用来更新your_table表中id为某值的记录的column1字段。

复制代码
cursor.execute("UPDATE your_table SET column1 = %s WHERE id = %s", [new_value, id])

删除(Delete)

使用cursor.execute()方法执行SQL删除语句,可以删除数据库中的记录。删除your_table表中id为某值的记录。

复制代码
cursor.execute("DELETE FROM your_table WHERE id = %s", [id])

示例

1,添加模型

Test/app11/models.py

复制代码
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')




class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publication_date = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return self.title

2,shell 环境执行脚本

复制代码
python manage.py shell

2.1 查询数据

fetchone() 方法 查询单行数据

复制代码
# fetchall() 方法 查询单行数据
from django.db import connection

# 使用cursor执行SQL查询
with connection.cursor() as cursor:
    cursor.execute("SELECT * FROM app11_post WHERE id = (%s)",['2'])
    row = cursor.fetchone()

if row:
    print(f"Post with id 2: {row}")
else:
    print("No post found with id 2")

fetchall() 方法 查询所有数据

复制代码
# fetchall() 方法 查询所有数据
from django.db import connection
from datetime import datetime

# 使用cursor执行SQL查询获取所有Post
with connection.cursor() as cursor:
    cursor.execute("SELECT id, title, content, pub_date FROM app11_post")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

print('\n')
# 使用cursor执行SQL查询获取所有Book
with connection.cursor() as cursor:
    cursor.execute("SELECT id, title, author, publication_date, price FROM app11_book")
    rows = cursor.fetchall()
    for row in rows:
        print(row)

2.2 插入数据

复制代码
from django.db import connection
from datetime import datetime
import pytz

# 使用cursor执行SQL查询插入数据
with connection.cursor() as cursor:
    # 如果你的Django项目启用了时区支持,确保你的datetime对象是带有时区信息的
    pub_date = datetime(2023, 1, 1, 12, 0, 0, tzinfo=pytz.UTC)
    
    # 对于Post模型
    cursor.execute(
        "INSERT INTO app11_post (title, content, pub_date) VALUES (%s, %s, %s)",
        ['My First Post1321', 'This is the content of my first post.', pub_date]
    )
    
    # 对于Book模型
    cursor.execute(
        "INSERT INTO app11_book (title, author, publication_date, price) VALUES (%s, %s, %s, %s)",
        ['My First Book1321', 'John Doe', '2023-01-01', 19.99]
    )

也可以用save()方法

复制代码
# 插入数据
from datetime import datetime
import pytz
from app11.models import Post

# 创建一个Post对象
post = Post(title='My First Post123', content='This is the content of my first post.123', 
            pub_date=datetime(2023, 1, 1, 12, 0, 0, tzinfo=pytz.UTC))
# 保存到数据库
post.save()



# 插入数据
from datetime import datetime
import pytz
from app11.models import Book

# 创建一个Book对象
book = Book(title='My First Book123', author='John Doe123', publication_date=datetime(2023, 1, 1, 12, 0, 0, tzinfo=pytz.UTC), price=19.99)

# 保存到数据库
book.save()

2.3 更新数据

复制代码
# 更新数据
from django.db import connection

# 新的title和content值
new_title = 'Updated Title123'
new_content = 'Updated Content123'

# 使用cursor执行SQL查询更新数据
with connection.cursor() as cursor:
    cursor.execute(
        "UPDATE app11_post SET title=%s, content=%s WHERE id=5",
        [new_title, new_content]
    )


from django.db import connection

# 新的title和price值
new_title = 'Updated Book Title123'
new_price = 29.99

# 使用cursor执行SQL查询更新数据
with connection.cursor() as cursor:
    cursor.execute(
        "UPDATE app11_book SET title=%s, price=%s WHERE id=5",
        [new_title, new_price]
    )

2.4 删除数据

复制代码
from django.db import connection

# 要删除的记录的id
post_id = 5

# 使用cursor执行SQL查询删除数据
with connection.cursor() as cursor:
    cursor.execute(
        "DELETE FROM app11_post WHERE id = %s",
        [post_id]
    )

    
from django.db import connection

# 要删除的记录的id
book_id = 5

# 使用cursor执行SQL查询删除数据
with connection.cursor() as cursor:
    cursor.execute(
        "DELETE FROM app11_book WHERE id = %s",
        [book_id]
    )
相关推荐
考虑考虑34 分钟前
数据库中的EXISTS
运维·数据库·后端
Wang's Blog1 小时前
Java框架快速入门: Spring Security+OAuth2之数据库和实体类的RBAC改造
java·数据库·spring
梦想平凡2 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
xcLeigh2 小时前
让大模型长出手脚,自己写SQL查数据库(Function Calling初探)
数据库·人工智能·sql·时序数据库·timechoai
yume_sibai3 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
AugustRed4 小时前
Neo4j 图数据库原理 + 应用场景简单介绍
数据库·neo4j
Gl�ria4 小时前
Redis 高可用架构对比
数据库·redis
IpdataCloud5 小时前
高可用的IP数据接口平台有哪些?从可用性、P99延迟到离线部署的评估框架(含代码)
数据库·tcp/ip·ip
呆萌很5 小时前
MySQL 数据库和表的管理操作(命令行)
数据库·mysql
毕业设计7036 小时前
(免费领源码)基于Python的博物馆研学活动管理系统的设计与实现22724- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·mysql·随机森林·pycharm·django·flask·推荐算法