Рассол Python не хранит данные - PullRequest
       14

Рассол Python не хранит данные

0 голосов
/ 09 сентября 2011

У меня есть словарь, содержащий {Имя: Адрес электронной почты}

У меня есть отдельный .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

Какие-нибудь идеи, чтобы начать меня?

Спасибо

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

Есть идеи, с чего можно начать?

Использование pickle в качестве динамически обновляемого хранилища данных для веб-сайта не очень хорошо.Чтобы избежать проблем с параллелизмом, вам нужно реализовать механизм файла блокировки и надеяться, что все остальное, что обращается к файлу, будет его уважать.

Я настоятельно рекомендую вам использовать хранилище данных, которое поддерживает одновременный доступ.Например, база данных.

Прочитайте: http://en.wikipedia.org/wiki/Concurrency_control


Вы можете легко начать с sqlite.Смотри: http://docs.python.org/library/sqlite3.html

0 голосов
/ 11 сентября 2011

Модуль полки python позаботится о том, чтобы предоставить вам объект, подобный словарю, но также выбирает и сохраняет объекты в файл, когда вы его запрашиваете.Как уже говорили другие, если он будет обновляться очень часто, вы захотите использовать какую-то базу данных, но для простоты использования модуль превзойти сложно.

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

0 голосов
/ 09 сентября 2011

MattH прав, вам определенно НЕ следует использовать pickle в качестве замены базы данных. Я предлагаю использовать что-то вроде mongo , так как это позволяет хранить словари на одном дыхании. Я обнаружил, что pymongo действительно прост в использовании и без проблем выполняет словари.

...