Condições para inserção na tabela

21 views
Skip to first unread message

Érique Moreira

unread,
Oct 1, 2017, 7:27:32 PM10/1/17
to web2py-users-brazil
Boa Noite

Tenho uma tabela, nela contém uma coluna para datas e gastos. A data é referente ao mês e ano desses gastos. Automaticamente é criado a coluna, com o mês atual e os gastos zerados, que alimento conforme estes ocorrem, atualizando a tabela com os valores somados. Porém, o problema é o seguinte, precisava de uma condição que cria-se uma nova coluna, apenas em um novo mês, automaticamente.

Segue exemplo do Models:


db.define_table('dados',
                Field('data', 'string', unique=True, requires=IS_IN_DB(db, 'dados.data', error_message="já está no banco"),
                Field('gasto1', 'float'),
                Field('gasto2', 'float'),)

db.dados.insert(data=mes+" de "+ano, gasto1=0, gasto2=0)

Obrigado


É criado automaticamente a coluna, porém, eu precisava criar uma condição que ao já existir a coluna (mes + ano => outubro de 2017) nada ocorre-se.

obrigado.

Ari Sobel

unread,
Oct 2, 2017, 6:21:51 AM10/2/17
to web2py-us...@googlegroups.com
Bom dia, ficou impreciso. Seria uma linha ( registro) a cada novo mes, nao uma coluna (campo na tabela), certo?
O que dispara a inserção de dados? 

Enviado do meu iPhone
--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-br...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Érique Moreira

unread,
Oct 2, 2017, 7:53:20 AM10/2/17
to web2py-users-brazil
Isso uma linha, hahaha

tentei algo assim:

if mes+"_"+ano not in db.dados.data:    
    db.dados.insert(data=mes+"_"+ano, gasto1=0, gasto2=0)

também tentei criar uma tabela nova por mês, assim:

if mes + "_de_ " + ano in db.tables:
    db.commit()

db.define_table(mes +"_de_"+ ano,
                Field('aluguel', 'float', label = 'aluguel'),
                Field('dental', 'float', label = 'dental'),)

 A tabela é criada, mas só consigo acessar de modo explícito e não usando variáveis.


Em segunda-feira, 2 de outubro de 2017 07:21:51 UTC-3, ari613 escreveu:
Bom dia, ficou impreciso. Seria uma linha ( registro) a cada novo mes, nao uma coluna (campo na tabela), certo?
O que dispara a inserção de dados? 

Enviado do meu iPhone

Em 1 de out de 2017, às 20:27, Érique Moreira <eriq...@gmail.com> escreveu:

Boa Noite

Tenho uma tabela, nela contém uma coluna para datas e gastos. A data é referente ao mês e ano desses gastos. Automaticamente é criado a coluna, com o mês atual e os gastos zerados, que alimento conforme estes ocorrem, atualizando a tabela com os valores somados. Porém, o problema é o seguinte, precisava de uma condição que cria-se uma nova coluna, apenas em um novo mês, automaticamente.

Segue exemplo do Models:


db.define_table('dados',
                Field('data', 'string', unique=True, requires=IS_IN_DB(db, 'dados.data', error_message="já está no banco"),
                Field('gasto1', 'float'),
                Field('gasto2', 'float'),)

db.dados.insert(data=mes+" de "+ano, gasto1=0, gasto2=0)

Obrigado


É criado automaticamente a coluna, porém, eu precisava criar uma condição que ao já existir a coluna (mes + ano => outubro de 2017) nada ocorre-se.

obrigado.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.

Carlos Costa

unread,
Oct 2, 2017, 10:00:23 AM10/2/17
to web2py-us...@googlegroups.com
Érike, antes de qualquer outra coisa, você tem que ter a respota a pergunta que o Ari fez.
Você quer criar uma coluna ou um registro por mês?

Se estiver em dúvida, pode falar que tentaremos lhe ajudar.

Numa tabela, a (bem) grosso modo, você tem colunas e linhas.
Colunas são os campos (Field) da tabela.
Linhas são os registros (Row) da tabela.

Criação colunas normalmente é feita durante o desenvolvimento somente.
Depois você insere registros (linhas) nessas colunas.

Provavelmente o que você precisa é inserir registros a cada mês.
Para não inserir em duplicidade, é só fazer um select antes e conferir se já existe.


Para se desinscrever, envie email a: web2py-users-brazil+unsubscribe...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsubscribe...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com

Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--


Carlos J. Costa
Cientista da Computação  | BS Computer Science
Esp. Gestão em Telecom   |
PgC Telecom Mangement
<º))><

Érique Moreira

unread,
Oct 2, 2017, 11:05:02 AM10/2/17
to web2py-users-brazil
Isso seria um registro por mês:

Tentei fazer assim, usando o select como me falou:

if db(db.dados.data == mes+"_de_"+ano).select():  
    naofazer="nãofazernada"
else:
    db.dados.insert(data=mes+"_"+ano, gastos1=0, gastos2=0)

Mas desta forma ele cria registros indefinidamente.


f db(db.dados.data == mes+"_de_"+ano).isempty():  
    naofazer="nãofazernada"
else:
    db.dados.insert(data=mes+"_"+ano, gastos1=0, gastos2=0)

Já desta forma não faz nada.

Então eu queria que esses dados fossem registrados automaticamente todo mês, já as atualizações são feitas via update no controller.

Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Carlos Costa

unread,
Oct 2, 2017, 11:57:13 AM10/2/17
to web2py-us...@googlegroups.com
Sua lógica está invertida e não precia do else se não vai fazer nada em casa já exista o registro.

if db(db.dados.data == mes+"_de_"+ano).isempty():   
    db.dados.insert(data=mes+"_"+ano, gastos1=0, gastos2=0)


outro problema é que se você não executar isso durante um mês inteiro mas executar no outro mês, vai ficar faltando um registro, do mês que não executou.
Talvez seja pouco provável, mas é possível.
    


Para se desinscrever, envie email a: web2py-users-brazil+unsubscribe...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsubscribe...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsubscribe...@googlegroups.com

Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsubscribe...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--


Carlos J. Costa
Cientista da Computação  | BS Computer Science
Esp. Gestão em Telecom   |
PgC Telecom Mangement
<º))><

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com

Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Paulo Andrade

unread,
Oct 2, 2017, 12:03:18 PM10/2/17
to web2py-us...@googlegroups.com
Carlos

Pôr que precisa de preencher com valor zerado? Não seria melhor tratar onde os dados são mostrados para se o valor não for encontrado mostrar zero?

Paulo Andrade 

Érique Moreira

unread,
Oct 2, 2017, 1:56:20 PM10/2/17
to web2py-users-brazil


Primeiramente obrigado pela ajuda Carlos.

Nesse caso ele esta a criar registros indefinidamente, eu queria o contrário, ou seja, que ao não encontrar o registro ele cria-se um novo e se encontrar não fize-se nada.
Dai eu fiz assim:

if db(db.dados.data != mes+"_de_"+ano).isempty():   
    db.dados.insert(data=mes+"_"+ano, gastos1=0, gastos2=0)

Me parece que deu certo :)

SIm, se ficar um mês sem  registro, ele vai faltar. Estou arrumando o Livro-Caixa do meu consultório, ele tem que marcar os gastos e as entradas, no final do mês consigo um relatório com todos os gastos e entradas dos profissionais, saldo e valor da hora clínica do mês. Eu fiz isso usando Python e Sqlite no modo texto, o relatório sai em *.txt ou em *.pdf, agora estou tentando o mesmo com Web2py, que conheci faz alguns meses, No controller vai ter a opção para registros anteriores, até porque às vezes temos que arrumar alguma coisa que passou batido.

E respondendo ao Carlos, sim poderia deixar  os valores como default na criação da tabela, depois que fiz eu percebi isso, porém, como ainda estou na fase de teste, deixei assim por preguiça.

Carlos Costa

unread,
Oct 2, 2017, 5:42:15 PM10/2/17
to web2py-us...@googlegroups.com
É melhor você fazer essa verificação na função em que você lança esses daddos.
É o mais comum.
E dessa forma você não faz um select a toda requisição, só quando for realmente importante.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Érique Moreira

unread,
Oct 10, 2017, 9:59:31 AM10/10/17
to web2py-users-brazil
Esse é o resultado por enquanto, acho que está ficando como eu quero, mas repeti bastante código.
Obrigado pela ajuda

web2py.app.Caixa.w2p
Reply all
Reply to author
Forward
0 new messages