一对多的关系在ZODB中不起作为列表是可变的.他们说解决方案是持久映射或持久列表或BTree.有人请告诉我它是如何完成的
我是第一次使用ZODB.只是尝试使用FileStorage提交数据.但是当我第二次执行相同的脚本时,我无法提交新对象.这是我的剧本
from ZODB import FileStorage,DB
import transaction
storage = FileStorage.FileStorage('/tmp/test.fs')
db = DB(storage)
conn = db.open()
root = conn.root()
#root['layer']={}
root['layer']['2b']={"id":'2b','name':'some name'}
transaction.commit()
conn.close()
db.close()
storage.close()
Run Code Online (Sandbox Code Playgroud)
当我再次重复代码时,只需更改id root['layer']['2c']并从python中退出,第二次对象就不会被提交.我只有第一个对象.可能是什么原因.
我在使用部署的简单Flask应用程序中使用flask-zodb时遇到问题.每次我尝试使用DB作为示例设置默认值:mod_wsgi
from flaskext.zodb import zodb, List
db = ZODB(app)
app.config.from_pyfile('settings.py') # here I have defined ZODB_STORAGE = "/home/username/webapps/myapp/htdocs/Data.fs"
@app.before_request
def set_db_defaults():
if 'entries' not in db:
db['entries'] = List()
Run Code Online (Sandbox Code Playgroud)
或者在以下视图中:
@app.route('/add', methods=['POST'])
def add_entry():
db['entries'].append(request.form)
flash('New entry was successfully posted')
return redirect(url_for('show_entries'))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1]
self._lock_file = LockFile(file_name + '.lock')
[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1] File
"/home/userame/.virtualenvs/myapp/lib/python2.7/site-packages/zc/lockfile/__init__.py",
line 76, in __init__
[Sat May 19 16:52:30 2012] …Run Code Online (Sandbox Code Playgroud) 我在一个zope实例(ZODB)中有多个plone站点.现在我想将一些网站移动到子文件夹.问题是,当我移动网站时,网站内所有页面的修改日期都会更新.有没有办法防止这种情况,以便日期保持不变?
我正在编写一个软件来检索网页,将有关它们的一些关键信息提取到一个对象中,然后将其写入 ZODB 数据库。我最终将大约 350,000 个这些对象写入我的数据库。
在我的代码运行一段时间后,每当我向数据库添加新对象时,它就会开始发布此消息...
UserWarning: The <class 'persistent.mapping.PersistentMapping'>
object you're saving is large. (26362014 bytes.)
Perhaps you're storing media which should be stored in blobs.
Perhaps you're using a non-scalable data structure, such as a
PersistentMapping or PersistentList.
Perhaps you're storing data in objects that aren't persistent at
all. In cases like that, the data is stored in the record of the
containing persistent object.
In any case, storing records this big is probably a bad idea.
Run Code Online (Sandbox Code Playgroud)
所以我的问题首先是错误消息所指的 …
根据ZODB文档:
保存点允许数据管理器将工作保存到其存储而无需提交完整事务.""保存点对释放内存也很有用,否则将用于保留事务的整个状态.
根据非常有启发性的文章何时在ZODB(Martijn Pieters)中提交数据:
...在整个交易过程中您可以要求将数据临时存储在磁盘上的一个点.[...]
保存点所做的一件事是调用ZODB缓存的垃圾收集,这意味着当前未使用的任何数据都将从内存中删除.
问题是,我需要在一个事务中存储大量项目,如下所示:
for i, item in enumerate(aLotOfItems):
database[i]=item
if i % 10000 ==0:
transaction.savepoint(True)
transaction.commit()
Run Code Online (Sandbox Code Playgroud)
我有点期望transaction.savepoint以同样的方式工作bsddb3.db.Db.sync.当Db.sync()被调用时,数据库刷新,你可以观察它.但是当设置保存点时,显然数据库和tmp文件都不会增长或者大小发生变化transaction.commit().
我真的很困惑:
设置保存点时实际发生了什么?
它与提交/刷新数据库有什么不同?
如果"要临时存储在磁盘上的数据",保存点在哪里写入数据?
我可以依靠保存点来实现"免费记忆"吗?
我的任务是解析Plone ZODB的巨大备份.没有其他方法可以获得备份,但是在一个大约433mb大的XML文件中.
请不要问为什么或如何,我只是解析文件的任务,以检索图片,文件和其他重要数据.
我已经用Java编写了一个基于StAX的XML解析器,它现在可以读取文件,存储信息并在必要时将其打印到txt文件中.
现在我的问题是:我需要检索的数据在哪里.据我所知,XML文件(即使是16GB内存也很难),它的节点都是一样的,只有属性与另一个不同(即记录节点中的"id"和"aka")其中有超过40000]).
是否有任何Plone或ZODB Dev可以帮助并指出我在这样的XML文件中存储数据的方式和位置的方向?我需要将哪种数据提供给解析器才能查找,存储和打印信息.
或者是否有任何关于如何从XML文件中检索数据的想法?
请记住,我>>不能"以此Plone.xml为基础使用其他任何东西.出于隐私和安全的明显原因,我也无法共享该文件.