繁体   English   中英

Python Pickle不存储数据

[英]Python Pickle Not Storing Data

我有一个包含{姓名:电子邮件地址}的字典

我有一个单独的.py来腌制这个:

emailDict = {'Kilizo': 'info%40kilizo.com' , 'about': 'about%40google.com' }


# write python dict to a file

output = open('orig.pkl', 'wb')
pickle.dump(emailDict, output)
output.close()

这是有效的,因为它将原始字典腌制为orig.pkl

然后在我的主网站上,我有:

# Pickling # Deleting Old Temp & Creating New One
tmp = os.path.isfile("tmp.pkl")
if tmp == True:
        os.remove("tmp.pkl")
shutil.copyfile("orig.pkl", "tmp.pkl")

# Pickling # Loading File
pkl_file = open('tmp.pkl', 'rb')
emailDict = pickle.load(pkl_file)
pkl_file.close()

然后,我在网站上有两个表单输入,其中包含电子邮件地址和相应的名称

#Processing input
emailAdded = fs.getvalue('emailAdd')
nameAdded = fs.getvalue('nameAdd')
if  emailAdded != None or nameAdded != None:
    print emailAdded
    print nameAdded 
    emailDict[nameAdded] = emailAdded
else:
    print "Please enter a name & email address" 
output = open('tmp.pkl', 'wb')
pickle.dump(emailDict, output)
output.close()
print emailDict

但是,没有新数据存储到tmp.pkl或orig.pkl

有什么想法让我开始?

谢谢

有什么想法让我开始?

使用pickle作为网站的动态更新数据存储并不是很好。 为了避免并发问题,您必须实现一个锁定文件机制,并希望访问该文件的所有其他内容都会尊重它。

我强烈建议您使用支持并发访问的数据存储。 例如数据库。

阅读: http//en.wikipedia.org/wiki/Concurrency_control


你可以用sqlite轻松开始。 请参阅: http//docs.python.org/library/sqlite3.html

MattH是对的,你绝对不应该使用pickle作为数据库的替代品。 我建议使用类似mongo的东西,因为它使存储字典变得轻而易举。 我发现pymongo真的很容易使用,并且没有问题。

python shelve模块负责为您提供类似字典的对象,但是当您提出要求时,它还会将对象存储并存储到文件中。 正如其他人所说,如果要经常更新,你想使用某种数据库,但为了易于使用,很难击败搁置模块。

http://docs.python.org/library/shelve.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM