当前位置: 首页 > news >正文

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 modelsclass 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])

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分享从零开始学习网络设备配置--任务6.1 实现计算机的安全接入
  • 【数据治理】隐私计算:数据治理中的安全守护者
  • 【Spring Boot 自定义配置项详解】
  • 操作系统:文件
  • SQL Server查询计划阅读及分析
  • 【c++刷题笔记-动态规划】day45: 115.不同的子序列 、583. 两个字符串的删除操作 、 72. 编辑距离
  • Chat-REC——基于 LLM 的推荐系统算法解析
  • Android SurfaceFlinger——创建EGLContext(二十六)
  • Docker部署Elasticsearch8.6.0 Kibana8.6.0
  • rabbitmq生产与消费
  • HTTPServer改进思路1
  • 怎样在 PostgreSQL 中实现数据的异地备份?
  • 微信小程序-CANVAS写入图片素材、文字等数据生成图片
  • MySql性能调优05-[sql实战演练]
  • 简单工厂、工厂方法与抽象工厂之间的区别
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • emacs初体验
  • Java 内存分配及垃圾回收机制初探
  • javascript面向对象之创建对象
  • JS字符串转数字方法总结
  • nginx 配置多 域名 + 多 https
  • PHP那些事儿
  • use Google search engine
  • 仿天猫超市收藏抛物线动画工具库
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 理解在java “”i=i++;”所发生的事情
  • 力扣(LeetCode)22
  • 扑朔迷离的属性和特性【彻底弄清】
  • 前端自动化解决方案
  • 如何编写一个可升级的智能合约
  • 使用API自动生成工具优化前端工作流
  • 使用权重正则化较少模型过拟合
  • 试着探索高并发下的系统架构面貌
  • 跳前端坑前,先看看这个!!
  • 微信小程序开发问题汇总
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • UI设计初学者应该如何入门?
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​secrets --- 生成管理密码的安全随机数​
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 数论-逆元
  • #{} 和 ${}区别
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #Lua:Lua调用C++生成的DLL库
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (day 12)JavaScript学习笔记(数组3)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (过滤器)Filter和(监听器)listener
  • (每日一问)基础知识:堆与栈的区别