3.4Python之对象数据库ZODB
- 建立和断开与ZODB的连接
#-*-coding: UTF-8 -*-
from ZODB import FileStorage, DB
import transactionclass MyZODB(object):def __init__(self, path):self.storage = FileStorage.FileStorage(path)self.db = DB(self.storage)self.connection = self.db.open()self.dbroot = self.connection.root()def close(self):self.connection.close()self.db.close()self.storage.close()
- 存储简单Python数据
from myzodb import MyZODB, transactiondb = MyZODB('./Data.fs')dbroot = db.dbrootdbroot['a_number'] = 3dbroot['a_string'] = 'Gift'dbroot['a_list'] = [1, 2, 3, 5, 7, 12]dbroot['a_dictionary'] = { 1918: 'Red Sox', 1919: 'Reds' }dbroot['deeply_nested'] = {1918: [ ('Red Sox', 4), ('Cubs', 2) ],1919: [ ('Reds', 5), ('White Sox', 3) ],}transaction.commit()db.close()
from myzodb import MyZODB
db = MyZODB('./Data.fs')
dbroot = db.dbroot
for key in dbroot.keys():
print key + ':', dbroot[key]
db.close()
运行结果:
db = MyZODB('./Data.fs')dbroot = db.dbrootdbroot['a_string'] = 'Something Else' transaction.commit() db.close()
但是,需要显示地将对列表或字典的更改告诉ZODB,因为ZODB无法了解所做的更改。这是持久性框架中的一个规定的可变性和参与功能。下面的代码不会导致ZODB看到更改:
a_dictionary = dbroot['a_dictionary']
a_dictionary[1920] = 'Indians'
transaction.commit()
db.close()
a_dictionary = dbroot['a_dictionary']
a_dictionary[1920] = 'Indians'
db._p_changed = 1
transaction.commit()
db.close()
del dbroot['a_number']
transaction.commit()
db.close()
- 持久化对象
from persistent import Persistent
class Host(Persistent):def __init__(self, hostname, ip, interfaces):self.hostname = hostnameself.ip = ipself.interfaces = interfaces
from mymodel import Hosthost1 = Host('www.example.com', '192.168.7.2', ['eth0', 'eth1'])dbroot['www.example.com'] = host1host2 = Host('dns.example.com', '192.168.7.4', ['eth0', 'gige0'])dbroot['dns.example.com'] = host2transaction.commit()db.close()
from mymodel import Hostfor key in dbroot.keys():obj = dbroot[key]if isinstance(obj, Host):print "Host:", obj.hostnameprint " IP address:", obj.ip, " Interfaces:", obj.interfacesdb.close()
更改对象
host = dbroot['www.example.com']
host.ip = '192.168.7.141'
transaction.commit()
db.close()
host = dbroot['www.example.com']
host.interfaces.append('eth2')
host._p_changed = 1
transaction.commit()
db.close()
3.4Python之对象数据库ZODB相关推荐
- 发现数据对象 -- 数据库开发的关键
发现数据对象 -- 数据库开发的关键 不管你是开发简单的数据库系统,还是复杂的系统甚至是做数据仓库,选用Sybase或Oracle,乃至简单的用Access或Foxpro,只要是关系型数据库都难免 ...
- Facebook将偷来的3D对象数据库用于其AI项目:被诉讼
立陶宛公司称:研究人员偷走了我们的3D文件,随后统统给了Facebook的AI研究人员. 据一家花费多年和几百万美元来收集整理数据集的立陶宛公司声称,Facebook将窃取的3D对象数据库用于其AI项 ...
- db4o_8.0对象数据库官方文档翻译_学习笔记三
紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not ...
- 常见的对象数据库有哪些
ObjectDB:Java对象数据库,支持JPA和JDO标准,使用对象图来存储和查询数据. db4o:Java和.NET平台的对象数据库,支持LINQ和原生查询语言. Versant Object D ...
- 对象数据库与关系数据库利弊谈
在20世纪60年代后期引入的面向对象技术引起了一场革命.到20世纪80年代后,面向对象的技术已经成为 了行业的主流,其原因多种多样:面向对象不仅简化了界面的开发,而且也提供了一种更加灵活.简单数据处理 ...
- 用对象数据库引擎探索全球气候变暖问题
[b]大数据:用对象数据库引擎探索全球气候变暖问题[/b] 我们不能把北极塞进关系型数据库里面.这是研究世界各地的冰雪气候的大卫加拉赫在设计一个解答基础性问题的系统时发现的,这个问题就是:" ...
- 对应到对象 数据库驼峰_【GI的自主空间数据库】一种竞争力,叫技术引领;一种竞争力,叫时间沉淀...
引子:GI的自主空间数据库及GIS框架来自于求学时MAPGIS的引导,工作时ARCGIS的追随,读博时IBM和Microsoft2篇文献....即使在大数据技术发展的今天,自主空间数据库存储仍然有其技 ...
- android 对象数据库中,解析嵌套的JSON对象,并存储在数据库中的Android
我只是试图让存储在我的JSON文件中的值,并将其保存到SQLite数据库:解析嵌套的JSON对象,并存储在数据库中的Android 这是我的JSON文件: { "list": { ...
- 对应到对象 数据库驼峰_SpringJPA底层DAO查询的写法归类总结
如果你要使用JPA就行底层操作,那么会涉及到很多查询的代码编写,虽然JPA屏蔽了复杂代码的编写,但是还是需要我们根据业务逻辑来编写一些额外的接口代码. 这里就来归纳总结下一些查询写法的编码示例. HQ ...
最新文章
- iOS 新窗口在最上层
- TOPCODER SAM 686 div1 300
- android 处理双击事件
- 记一次死锁问题的排查和解决
- 一句命令行检查cpu个数
- 惊呆!骑士一天收入过万?顺丰同城回应:用户打赏约7856元
- 敏捷开发系列学习总结(13)——Spotify敏捷模式详解三部曲第一篇:研发团队
- ZYNQ7020 Soc最小系统创建及测试
- 4、web(js):js 操作table: insertRow(),deleteRow(),insertCell(),deleteCell()方法
- 爬取王者荣耀皮肤图片
- 什么是邮箱个人签名?邮箱如何设置个人签名?
- 常见端口对应服务及入侵方式
- 【云原生 | 19】Docker数据存储详解
- Wex5 popOver组件的使用
- 哈拉比数据库;为了家人
- 计算机网络知识全面讲解:域名解析的过程
- 彻底删除wine安装的软件
- 数据库和表的基础练习之水果商店
- 基于单片机智力竞赛抢答器的设计-毕设课设资料
- SystemUI 下拉通知栏快捷键加载流程