python杂学

说明对python的知识的学习

猴子补丁

猴子补丁(Monkey Patching) - wakyde - 博客园

Python面试题:请解释什么是猴子补丁(monkey patching)-优快云博客

Python最难理解的概念之一,猴子补丁?是什么?_json_python_Patch

【Python】 Python中的魔法:猴子补丁(Monkey Patching)技术详解_猴子补丁 python-优快云博客

其实就是动态的添加或修改对象的属性或行为,没有在声明时把所有的内容给添加上,而是在其他地方进行添加

fastapi rabbitmq celery

FastAPi Celery RabbitMQ 与 Redis 的使用,并使用 Flower 监控 Celery 状态 - 星尘的博客 - 博客园

在 SQLAlchemy 中,db.add() 和 SQL 的 INSERT

并不是完全相同的概念,但它们之间有一些联系。

1. db.add()(SQLAlchemy 中)

  • db.add() 是将一个对象(如 nore)标记为“待提交”或“新增”到数据库。
  • 这并不意味着立即执行 SQL 的 INSERT 操作,而只是标记该对象是需要添加或更新的。
  • 如果该对象是新的(即没有在数据库中找到对应的记录),那么 db.add() 会告诉 SQLAlchemy 这条数据是新的,SQLAlchemy 会在 commit() 时执行 INSERT 操作,将这条新记录插入到数据库中。
  • 如果该对象是已经从数据库查询出来的,并且你修改了它的属性,那么 db.add() 的作用是标记该对象的更改,之后在 commit() 时执行 UPDATE 操作。

2. INSERT(SQL 中)

  • INSERT 是 SQL 中的一个操作,它用来将一条新的记录插入到数据库表中。
  • INSERT 是直接执行的数据库操作,通常用于向数据库中插入数据。

区别:

  • db.add() 是 SQLAlchemy ORM 中的一个方法,它只是标记一个对象(例如 nore)为“待提交”,并不是直接执行数据库操作。它是与会话(Session)和对象(如 WarePrice)的状态管理有关的。在 commit() 时,SQLAlchemy 会决定是否执行 INSERTUPDATE

  • INSERT 是 SQL 中的实际数据库操作,通常会直接执行,将数据插入到数据库中。它与数据库的底层操作直接相关。

具体区别:

  1. db.add() 会将对象添加到 SQLAlchemy 会话中。它并不立即发出 SQL 请求,只有在你调用 commit() 时,SQLAlchemy 会决定执行相应的数据库操作(如 INSERT 或 UPDATE)。
  2. INSERT 是直接执行的数据库操作,用于将数据插入到数据库中。它是一个原始的 SQL 语句,而不是对象关系映射(ORM)方法。

例子:

假设你有一个 WarePrice 类的实例:

# 创建一个新的 WarePrice 对象 
new_ware = WarePrice(stick_code="ABC123", upset_price=100)

如果你使用 db.add()

# 将新对象标记为待提交 
db.add(new_ware) await db.commit()

commit() 时,SQLAlchemy 会检查 new_ware 是新的对象(即没有在数据库中找到该记录),并生成一个 INSERT SQL 语句将它插入到数据库。

但如果你查询了数据库中的一个对象并修改了它的属性:


# 查询一个已经存在的对象 
result = await db.execute(select(WarePrice).filter_by(id=1)) 

existing_ware = result.scalar_one() 

# 更新对象的属性 
existing_ware.upset_price = 150 

# 标记为待提交 
db.add(existing_ware) 

await db.commit()

在这种情况下,db.add() 会标记对象的更改,并且在 commit() 时,SQLAlchemy 会生成一个 UPDATE 语句,而不是 INSERT,因为 existing_ware 对象已经存在。

总结:

  • db.add() 是用于将对象添加到 SQLAlchemy 会话中,它会在 commit() 时根据对象的状态(是新对象还是已存在的对象)决定执行 INSERT 或 UPDATE 操作。
  • INSERT 是数据库层的操作,用来将一条新数据插入到表中,通常是直接执行的 SQL 语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值