sqlalchemy中的内/外连接及立即/延迟加载在mysql, postgresql, db2中的差异处理(by quqi99)
2014-01-03 16:02
555 查看
作者:张华 发表于:2014-01-03
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
( http://blog.csdn.net/quqi99 )
见:https://review.openstack.org/#/c/61027/左连接在postgresql中如果左表的行存在匹配的null值的话,会造成无法有效的对左右连接行加锁,故会报错(在mysql中不会), 所以如下列IPAllocationPool和IPAvailabilityRange两表,
在定义的时候使用左外连接,然后再用options(orm.joinedload('available_ranges', innerjoin=True))将它定义成内连接解决.
class IPAllocationPool():
# lazy="joined"为左外连接,lazy="select"为内连接,内连接默认是立即加载的策略
available_ranges = orm.relationship(IPAvailabilityRange, backref='ipallocationpool', lazy="joined", cascade='delete')
allocation_pools = (context.session.query(models_v2.IPAllocationPool).filter_by(subnet_id=subnet_id).options(orm.joinedload('available_ranges', innerjoin=True)).with_lockmode('update'))
但是这样在db2中又会造成问题,因为内连接是立即加载,在db2中,在查询IPAllocationPool时就立即加载了IPAvailabilityRange,然后对IPAvailabilityRange表做合并操作删除了一条记录,那么这时个再来更新IPAllocationPool表就会报错.
所以它又要求我们将其改成延迟加载, 再加"enable_eagerloads(False)"可以解决.
options(orm.noload('available_ranges')))
相关文章推荐
- JDBC连接DB2、Oracle、MySQL、PostgreSQL
- 正好整理了一下,自己做了个连接数据库的组件,支持SQLSERVER,ACCESS,ORACLE,FoxPro,MySql,IBM DB2,DBF等数据库,并且支持事务处理
- java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
- JSP 连接各类数据库大全(Oracle,MSSQL,DB2,Informix,SyBASE,MYSQL,PostgreSQL)
- java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
- JSP数据库连接方法(MySQL,MSSQL,Oracle,DB2,Informix,PostgreSQL,Sybase)
- java连接Oracle、Mysql、DB2、Sybase、Informix、PostgreSQL数据库代码
- MySQL 连接远程数据库 有延迟处理方法
- JDBC连接DB2、Oracle、MySQL、PostgreSQL
- JSP连接各类数据库大全(Oracle,MSSQL,DB2,Informix,SyBASE,MYSQL,PostgreSQL)
- java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
- java连接各种数据库(Oralce,MySQL,SQLServer,DB2,Infomix,SyBase,PostgreSQL)方法
- C#连接Access、SQL Server、Oracle、MySQL、DB2和SyBase数据库的代码集
- NHibernate 延迟加载与立即加载 (第七篇)
- Python的SQLalchemy模块连接与操作MySQL的基础示例
- flask框架在python中通过sqlalchemy+pymysql连接mysql
- javaWeb项目中连接MySQL出现无法加载驱动的问题
- sqlalchemy连接postgresql
- jdbc使用DataSource连接mysql,postgresql,oracle的代码
- 立即加载,外连接,预先抓取的关系--摘抄自"hibernate开发及整合应用大全"