Mudanças nos esquemas de Bancos de dados
http://nothing.tmtm.com/2009/02/gradual-deployment-of-schema-changes/http://rbtcollins.wordpress.com/2012/08/13/minimising-downtime-for-schema-changes-with-postgresql/
quote
def codigo_python(): pass
LeituraConsolidada.objects.filter(data_leitura__year='2011').extra(select = {'mes':'extract(month from data_leitura)'}).values('mes').annotate(Avg('ozonio'), Avg('dioxido_enxofre'))
#Saida
[{'ozonio__avg': 24.965, 'dioxido_enxofre__avg': -0.42499999999999999, 'mes': 1.0}, {'ozonio__avg': 43.613333333333337, 'dioxido_enxofre__avg': -0.28000000000000003, 'mes': 2.0}]
LeituraConsolidada.objects.filter(data_leitura__year='2011').extra(select = {'mes':'extract(month from data_leitura)'}).values('mes').annotate(Avg('ozonio'), Avg('dioxido_enxofre'))
Django’s default behavior is to run with an open transaction which it commits automatically when any built-in, data-altering model function is called. For example, if you call model.save() or model.delete(), the change will be committed immediately.Isso quer dizer que caso haja um erro durante a transação no banco de dados as transações subsequentes também não serão executadas. Este comportamento poder ser útil em alguns casos, mas não todos! Mas o django como sempre lhe dá liberdade para alterar o comportamento padrão, e geralmente de uma maneira muito simples. Este é o caso.
* DatabaseError('value too long for type character varying(70)
* DatabaseError('current transaction is aborted, commands ignored until end of transaction block
...
* DatabaseError('current transaction is aborted, commands ignored until end of transaction block]
for row_index in range(20 ):
try:
model_instance.save() # salvar o modelo
except Exception, error_str:
error_list.append(error_str)
Savepoint rollbackO que é dito aqui, é que ao salvar um ponto de rollback, eu posso comitar as transações que ocorreram sem erro, e dar um "rollback" somente na transação que falhou.
If you are using PostgreSQL 8 or later, you can use savepoints to control the extent of a rollback. Before performing a database operation that could fail, you can set or update the savepoint; that way, if the operation fails, you can roll back the single offending operation, rather than the entire transaction.
for row_index in range(20 ):
try:
sid = transaction.savepoint() # salvar ponto da transação
model_instance.save() # salvar o modelo
transaction.savepoint_commit(sid) # aplicamos o commit da transação
except Exception, error_str:
error_list.append(error_str)
transaction.savepoint_rollback(sid) #rollback somente da transação que falhou
In [1]: def funcao(x, lista=[]):
...: lista.append(x)
...: return lista
...:
In [2]: print funcao('a')
------> print(funcao('a'))
['a']
In [3]: print funcao('b')
------> print(funcao('b'))
['a', 'b']
In [4]: print funcao('c')
------> print(funcao('c'))
['a', 'b', 'c']
In [5]: print funcao('d')
------> print(funcao('d'))
['a', 'b', 'c', 'd']
import feedparser,sys
def f(data):
return data.encode("latin1","ignore")
try:
feed = sys.argv[1]
except IndexError:
feed = "http://www4.bcb.gov.br/feed/taxas.ashx"
d = feedparser.parse(feed)
print f(d.feed.title),";",f(d.feed.link),";",f(d.feed.subtitle),";",f(d.version),";",f(d.encoding),";",len(d.entries)
for entry in d.entries:
print f(entry.title),";",
print f(entry.link),";",
try:
print f(entry.author_detail.name),";",
except AttributeError:
pass
try:
print f(entry.content)
except AttributeError:
pass
try:
print f(entry.description)
except:
pass
wTree.get_widget_prefix('') #utilizando o "get by prefix" sem paramentro, a resultado é uma lista de OBJETOS widgets
#por exemplo .....
[,
< gtk.vbox>,
,
.....
,
,
,