python的Pony ORM框架总结

最近学校里办了python兴趣班,刚学完python的基础语法就讲了这个Pony框架,以下是我上课记录的某些关键点的笔记

Python 2提供了两种字符串类型 - str(字节字符串)和unicode(unicode字符串),而在Python 3中,str类型表示unicode字符串,并且刚刚删除了unicode。
从Pony Release 0.6开始,添加了对Python 3的支持,而不是unicode和LongUnicode,我们建议分别使用str和LongStr类型。
LongStr和LongUnicode作为CLOB存储在数据库中。
缓冲区和字节类型在数据库中存储为二进制(BLOB)类型也就是二进制大对象长度为两个G。

如果两个实体具有一对一关系,则通常意味着它们可以组合成单个实体。
如果您的数据图有很多一对一的关系,那么它可能表示您需要重新考虑实体定义。

在括号中,在属性类型之后,您可以指定属性选项。
每个属性可以是以下类型之一:
Required 必须的
Optional 可选的
PrimaryKey 主键
Set 集合
SQLite的Python驱动程序不会在SELECT语句上启动事务。它只在可以修改数据库的语句上开始事务:INSERT,UPDATE,DELETE。其他驱动程序在任何SQL语句上启动事务,包括SELECT。

Pony在几个阶段缓存数据以提高性能。它缓存:
生成器表达式转换的结果。如果在程序中多次使用相同的生成器表达式查询,则它将仅转换为SQL一次。此缓存对整个程序是全局的,不仅适用于单个数据库会话。
从数据库创建或加载的对象。Pony将这些对象保存在Identity Map中。在离开db_session()作用域或事务回滚时清除此高速缓存。
查询结果。如果再次使用相同的参数调用相同的查询,Pony将从缓存返回查询结果。一旦任何实体实例发生更改,就会清除此缓存。在离开db_session()作用域或事务回滚时清除此高速缓存。

悲观锁
假设一定会出现线程冲突的线程锁
乐观锁
假设不会出现冲突的线程的锁,但是为了防止线程的锁的冲突,在保存的时检查是否修改

事务的传播行为

如果两个银行分行将尝试同时将全部金额转移到不同的帐户,则将执行这两个操作。
每个函数都将通过验证,最后一个事务将覆盖另一个事务的结果。
这种异常称为“丢失更新”。

隔离是一种属性,用于定义一个事务所做的更改何时对其他并发事务隔离级别可见。ANSI SQL标准定义了四个隔离级别:
READ UNCOMMITTED - 最低隔离级别
READ COMMITTED
REPEATABLE READ
SERIALIZABLE -最高隔离级别
spring 有五个隔离级别,一般的数据库只有四个隔离级别

Pony不会自动提交事务

猜你喜欢

转载自blog.csdn.net/qq_40929531/article/details/84967340
今日推荐