[python] cherrypy&databázová data, cachování

Lukáš Linhart almad na include.cz
Neděle Listopad 25 13:55:00 CET 2007


E-mail martin.stiborsky at gmail.com ze dne Sunday 25 of November 2007:
> Hezkou neděli přeji.
> v mém minulém dotazu tady v konferenci jsem se ptal, jak je
> nejvýhodnější ukládat datum do databáze. Zkusil jsem tedy timestamp.

Stejně bych šel do toho datetimu :)

>
> ValueError: invalid literal for float(): 24/11/2007 14:06:05
>
> Místo timestamu z databáze, dostane program data která má dostat od
> programu šablona, někde se to nejspíš cachuje, nebo já nevím, v
> cherrypy jsem cachování vypnul, sqlalchemy to myslím nedělá, genshi
> šablony, snad taky ne, nic takového jsem teda nenašel, netuší někdo,
> kde se děje chyba ? Vím že tohle bude dost těžké říct, když tady není
> kompletní kód, ale cokoli mi pomůže ..

Pokud dobře vím tak cachuje a to právě v ORM, tedy v sqlalchemy. Spousta ORM 
má tu vlastnost, že jedna entita s daným primárním klíčem má max. jednu 
instanci, tj. dotaz na stejným PK vrátí už vytvořenou instanci, tj. se pak 
dají porovnávat přímo objekty.

> Tímhle dělám hezké datum:
> def public_date(timestamp):
> 	timestamp = float(timestamp)
> 	date = datetime.fromtimestamp(timestamp)
> 	return date.strftime("%d/%m/%Y %H:%M:%S")
>
> smyčka pro nahrazování:
> for post in posts_data:
>               post.create_date = public_date(post.create_date)
> ....
> return posts_data

Summary:
 - přepíšete atribut create_date zformátovaným datem
 - instance zůstane někde viset v cachi
 - při reloadu dostane tu původní instanci, co už má přepsan atribut
 - error

Řešením je asi uložit zformátované datum do nového atributu. Na nějaké vypnutí 
cachí bych se nespoléhal, protože jinak tenhle problém nastane při 
paralelních requestech.

A nebo, kdybyste místo timestampu použil datetime, tak bych považoval za 
legální přistupovat k jeho atributu strfime v šabloně a zformátovat si to až 
tam.

Pěknou a pokud možno nepočítačovou neděli,
-- 
Lukáš Linhart
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
Url : http://www.py.cz/pipermail/python/attachments/20071125/2c11711c/attachment.pgp 


Další informace o konferenci Python