说明对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 会决定是否执行INSERT
或UPDATE
。
INSERT
是 SQL 中的实际数据库操作,通常会直接执行,将数据插入到数据库中。它与数据库的底层操作直接相关。
具体区别:
db.add()
会将对象添加到 SQLAlchemy 会话中。它并不立即发出 SQL 请求,只有在你调用commit()
时,SQLAlchemy 会决定执行相应的数据库操作(如INSERT
或UPDATE
)。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 语句。