Criar campo MOEDA no postgresql

2,793 views
Skip to first unread message

carlynhos77

unread,
Nov 2, 2013, 6:29:27 AM11/2/13
to python...@googlegroups.com
Ola, bom dia... Gostaria de saber qual definicao devo usar para criar um campo que aceita valores com virgula, tipo (1,11), tentei o double nao deu certo... numeric diz q nao existe... será q devo usar TEXT e no front-end fazer a formatação??

Vinicius Assef

unread,
Nov 3, 2013, 1:37:04 AM11/3/13
to python...@googlegroups.com
Veja se isso ajuda:
http://www.postgresql.org/docs/current/static/datatype-money.html

2013/11/2 carlynhos77 <carly...@hotmail.com>:
> --
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com
>
> ---
> Você está recebendo esta mensagem porque se inscreveu no grupo "Python
> Brasil" dos Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para python-brasi...@googlegroups.com.
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

carlynhos77

unread,
Nov 3, 2013, 4:44:30 AM11/3/13
to python...@googlegroups.com
Ola, bom dia... na verdade ja tinha visto essa documentacao, ja tentei varios tipos (float, money, lc_monetary, integer), por enquanto to deixando como TEXT para ir seguindo sem erro, mas nao é o correto... uso o POSTGRESQL 9.1

ainda preciso de ajuda para resolver esse caso, no codigo to usando assim para criar o campo:

Field("valaliqserv", "text"),

carlynhos77

unread,
Nov 3, 2013, 4:48:07 AM11/3/13
to python...@googlegroups.com
so uma correcao na minha postagem.... o postgresql q to usando é o 9.3, e nao 9.1 como informei...


Em sábado, 2 de novembro de 2013 08h29min27s UTC-2, carlynhos77 escreveu:

Marcos Thomaz

unread,
Nov 4, 2013, 12:24:41 AM11/4/13
to python...@googlegroups.com
Usar o tipo money não te atendeu (após configurá-lo)??


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--


Marcos Thomaz da Silva
Analista de Tecnologia da Informação

Jonathan Gonçalves da Silva

unread,
Nov 2, 2013, 8:47:55 AM11/2/13
to python...@googlegroups.com
No postgres vc declara o campo como float.

Exemplo:

create table moeda(value float);
insert into moeda values(1.22);

:)



Em 2 de novembro de 2013 08:29, carlynhos77 <carly...@hotmail.com> escreveu:
Ola, bom dia... Gostaria de saber qual definicao devo usar para criar um campo que aceita valores com virgula, tipo (1,11), tentei o double nao deu certo... numeric diz q nao existe... será q devo usar TEXT e no front-end fazer a formatação??

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
Jonathan G. da Silva

RespondeAí - www.respondeai.com



deny....@gmail.com

unread,
Nov 4, 2013, 6:53:56 AM11/4/13
to python...@googlegroups.com
Bom dia pessoal, lendo o histórico da lista vi que este assunto ja foi falado a algum tempo atrás porem muita coisa mudou de la para ca e gostaria de saber dos amigos, hoje , existe algum modo de criar apps para o android utilizando o python como linguagem central ? Existe alguma meio de criar o .apk utilizando python ? Li que o Kivy faz isso mais parece que precisa de uma emulação no aparelho para rodar os apps feitos no kivy . E também não é possível distribuir o aplicativo no google play .

Teria alguma solução definitiva nos dias de hoje para criar tais aplicativos ? Se sim , alguém tem algum exemplo ou ja fez algum app e disponibilizou na google play ?


Abraço

Deny


Pedro Werneck

unread,
Nov 4, 2013, 6:58:41 AM11/4/13
to python...@googlegroups.com
Até onde eu saiba, o kivy pode sim gerar um APK, e fazendo o processo de assinatura você pode fazer o release no Google Play normalmente.

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
    http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
    python-brasi...@googlegroups.com

---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
---
Pedro Werneck

Lucas de Biaggi Januário

unread,
Nov 4, 2013, 7:00:20 AM11/4/13
to python...@googlegroups.com
show de bola essa informação pedro muito obrigado

Pedro Werneck

unread,
Nov 4, 2013, 7:06:57 AM11/4/13
to python...@googlegroups.com
Um detalhe que esqueci de mencionar é que o Kivy disponibiliza uma VM com todas as ferramentas já prontas para gerar apk.

No final da página abaixo:



2013/11/4 Lucas de Biaggi Januário <lbjan...@gmail.com>



--
---
Pedro Werneck

deny....@gmail.com

unread,
Nov 4, 2013, 7:41:50 AM11/4/13
to python...@googlegroups.com
On Nov 4, 2013, at 10:06 AM, Pedro Werneck <pjwe...@gmail.com> wrote:

Um detalhe que esqueci de mencionar é que o Kivy disponibiliza uma VM com todas as ferramentas já prontas para gerar apk.

No final da página abaixo:



Show Pedro , nao tinha conhecimento, vou testar uma aplicação básica e gerar o apk . 

Agora assinando a google play eu consigo enviar este apk para la ? 

Obrigado

Marcos Thomaz

unread,
Nov 4, 2013, 7:58:50 AM11/4/13
to python...@googlegroups.com
Usando o tipo money, e lc_monetary = Portuguese_Brazil.1252, você pode ter inserções do tipo:
insert into tabela (valor) values ( 1200.52 );         --valor R$ 1.200,52
insert into tabela (valor) values ( '1.200,52' );       --valor R$ 1.200,52
insert into tabela (valor) values ( '1200,52' );        --valor R$ 1.200,52
insert into tabela (valor) values ( 'R$ 1200,52' );   --valor R$ 1.200,52
insert into tabela (valor) values ( 'R$ 1.200,52' );  --valor R$ 1.200,52

Alexandro Tiago Oliveira

unread,
Nov 4, 2013, 2:52:24 PM11/4/13
to python...@googlegroups.com
use o campo numeric passando por padrao as casas que vc quer
 tipo assim 
create table o nome da sua tabela(
       
     nome_campo numeric(10,2)

)
onde da e as casas antes da virgula e e as casas depois e na hora de gravar no banco pode deve gravar com a virgula mesmo 
ou pode usar o tipo de dado double precision
 Alexandro Tiago de Oliveira 

Contato
Fone:(45)9955-2998
Fone:(45)84269889

Carlos Figueiredo

unread,
Nov 4, 2013, 8:19:54 PM11/4/13
to python...@googlegroups.com
Ja q vc ja viu a documentação... existe algum problema em usar o tipo money? Por qual motivo não te atende? Assim talvez possamos dar respostas mais apropriadas... 


2013/11/4 Alexandro Tiago Oliveira <alexand...@gmail.com>

carlynhos77

unread,
Nov 5, 2013, 5:48:04 AM11/5/13
to python...@googlegroups.com
Ola, bom dia...

Na verdade o problema nao é na hora de salvar ou editar os dados... o problema é na criação da tabela via codigo, no MODELS, para um campo texto, usando o TEXT... so que para um valor que recebera valores monetarios nao conseguindo criar o campo no banco de dados usando o MONEY, NUMERIC, sempre dá erro... e no banco de dados ja vi que tem essas propriedades, so q nao consigo definir elas via codigo pelo projeto.. esse é o problema

Vinicius Assef

unread,
Nov 5, 2013, 6:34:25 AM11/5/13
to python...@googlegroups.com
O que você está usando?
Django? Web2py? SQLAlchemy? O que?

2013/11/5 carlynhos77 <carly...@hotmail.com>:

carlynhos77

unread,
Nov 5, 2013, 6:44:11 AM11/5/13
to python...@googlegroups.com
ola,

to usando o web2py..


Em sábado, 2 de novembro de 2013 08h29min27s UTC-2, carlynhos77 escreveu:

Maxwell Morais

unread,
Nov 5, 2013, 6:50:53 AM11/5/13
to python...@googlegroups.com

Use SQLCustomType, como descrito aqui http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer#Custom-Field-types-(experimental))

money = SQLCustomType(
     type ='float',
     native='money',
     encoder =(lambda x: float(x or 0) ),
     decoder = (lambda x: float(x or 0))
)
db.define_table('example', Field('cash',type=money))


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--

Maxwell Morais
Tecnologia da Informação

Vinicius Assef

unread,
Nov 5, 2013, 7:39:11 AM11/5/13
to python...@googlegroups.com
Ou use tipo decimal [1] que será mapeado para o tipo padrão SQL decimal, como em qualquer RDBMS.



2013/11/5 Maxwell Morais <max.mor...@gmail.com>

carlynhos77

unread,
Nov 5, 2013, 7:59:02 AM11/5/13
to python...@googlegroups.com
entao coloquei o codigo conforme o orientado, mas ao criar o campo no banco de dados o mesmo continua com a propriedade TEXT... no meu MODELS ta assim:

from gluon.dal import SQLCustomType
money = SQLCustomType(
     type ='float',
     native='money',
     encoder =(lambda x: float(x or 0) ),
     decoder = (lambda x: float(x or 0))
)

db.define_table("cadaliquota",
    Field("ano", "integer", length=128, notnull=True),
    Field("dtlei",  "date", length=2, notnull=True),
    Field("nrlei",  "text", length=8, notnull=True),
    Field("valaliqserv", type=money),
    Field("valaliqemp", type=money),
    Field("dtinicio", "date"),
    Field("obs", "text"),
    auth.signature
    )


Em sábado, 2 de novembro de 2013 08h29min27s UTC-2, carlynhos77 escreveu:

Vinicius Assef

unread,
Nov 5, 2013, 8:30:43 AM11/5/13
to python...@googlegroups.com
Aonde você está vendo essa propriedade TEXT?

Pode mostrar o output disso?

2013/11/5 carlynhos77 <carly...@hotmail.com>:

carlynhos77

unread,
Nov 5, 2013, 8:35:57 AM11/5/13
to python...@googlegroups.com
entao, no models eu coloquei o codigo mostrado... dai se eu abrir o pgAdmin e olhar a tabela criada, a propriedade do campo "ValAliqServ" esta definida como "text".... e nao como um formato para aceitar valores com virgula...



Em sábado, 2 de novembro de 2013 08h29min27s UTC-2, carlynhos77 escreveu:

Vinicius Assef

unread,
Nov 5, 2013, 11:29:52 AM11/5/13
to python...@googlegroups.com
Estranho.

Faça o seguinte:
1) Apague essa tabela do BD.
2) Apague seus arquivos de migrations, do diretório databases que fica
dentro de sua aplicação.
3) Vá no define_table() dessa tabela e troque o formato do seu campo
para 'decimal(8,2)'.
4) Rode a aplicação novamente e veja o resultado.

Se não funcionar, me adicione ao seu gtalk.



2013/11/5 carlynhos77 <carly...@hotmail.com>:

carlynhos77

unread,
Nov 5, 2013, 3:46:09 PM11/5/13
to python...@googlegroups.com
ola, entao... ja tentei de varias formas aqui, vamos aos detalhes:

o codigo dessa forma:

from gluon.dal import SQLCustomType
decimal = SQLCustomType(
    type ='double',  # as web2py sees it
    native ='integer',    # as db sees it
    encoder =(lambda x: int(float(x) * 100)), #a conversao é feita aqui
    decoder = (lambda x: Decimal("0.00") + Decimal(str(float(x)/100)))
    )

db.define_table("cadaliquota",
    Field("ano", "integer", length=128, notnull=True),
    Field("dtlei",  "date", length=2, notnull=True),
    Field("nrlei",  "text", length=8, notnull=True),
    Field("valaliqserv", type=decimal),
    Field("valaliqemp", type=decimal),
    Field("dtinicio", "date"),
    Field("obs", "text"),
    auth.signature
    )

ao digitar um valor com virgula (exemplo: 1,21) dá o erro:
  File "C:/web2py/applications/info_pontual/models/db.py", line 91, in <lambda>
encoder =(lambda x: int(float(x) * 100)), #a conversao é feita aqui
ValueError: invalid literal for float(): 1,21

e no banco de dados é criado o campo tipo INTEGER...

--------------------------------------------------------------------------------------------------------------------

agora o codigo dessa forma, dá o erro:

from gluon.dal import SQLCustomType
decimal = SQLCustomType(
    type ='double',  # as web2py sees it
    native ='integer',    # as db sees it
    encoder =(lambda x: int(float(x) * 100)), #a conversao é feita aqui
    decoder = (lambda x: Decimal("0.00") + Decimal(str(float(x)/100)))
    )

db.define_table("cadaliquota",
    Field("ano", "integer", length=128, notnull=True),
    Field("dtlei",  "date", length=2, notnull=True),
    Field("nrlei",  "text", length=8, notnull=True),
    Field("valaliqserv", 'decimal(8,2)'),
    Field("valaliqemp", 'decimal(8,2)'),
    Field("dtinicio", "date"),
    Field("obs", "text"),
    auth.signature
    )

nao dá erro de código na pagina, no banco de dados é criado o campo tipo NUMERIC(8,2), mas quando vai incluir um registro e digita um valor (exemplo: 1,21), ele diz:

Digite um valor entre -1e+10 e 1e+10 

e nao salva...




Em sábado, 2 de novembro de 2013 08h29min27s UTC-2, carlynhos77 escreveu:

Vinicius Assef

unread,
Nov 5, 2013, 4:00:49 PM11/5/13
to python...@googlegroups.com
Vamos por partes.

1) Esquece o SQLCustomType. Retire a parte que você define o decimal.

2) Tente o define_table() simplesmente assim:

db.define_table("cadaliquota",
Field("ano", "integer", notnull=True),
Field("dtlei", "date", notnull=True),
Field("nrlei", "string", length=8, notnull=True),
Field("valaliqserv", 'decimal(8,2)'),
Field("valaliqemp", 'decimal(8,2)'),
Field("dtinicio", "date"),
Field("obs", "text"),
auth.signature
)

Obs.:
a) eu tirei os parâmetros length porque não faz sentido um integer ter
length de 128 e uma data com length de 2.
b) Eu mudei o campo nrlei para o tipo string porque não faz sentido um
text com tamanho de 8.

3) Quando digitar o valor no formulário, informe o ponto como
separador de decimais.
Exemplo: 1.21 e não 1,21.

Obs. tem como configurar isso no web2py, mas vamos por partes.

4) Me diga o que aconteceu.

5) Como eu falei para o outro colega, já que esse assunto é específico
sobre Web2py, o melhor lugar para discutir esse assunto é na lista
brasileira de Web2py, certo? ;-)



2013/11/5 carlynhos77 <carly...@hotmail.com>:

carlynhos77

unread,
Nov 5, 2013, 4:32:51 PM11/5/13
to python...@googlegroups.com
ola, vinicius agora deu certo... concordo que esse assunto tem q ser no web2py mesmo... entao pra encerrar este, quero lhe agradecer pela ajuda.... vou abrir um post la no web2py brasil... vou abrir um post no web2py brasil para saber como tratar esse negocio de digitar ponto e não virgula.... o usuário tem costume com virgula ne


Em sábado, 2 de novembro de 2013 08h29min27s UTC-2, carlynhos77 escreveu:

Vinicius Assef

unread,
Nov 5, 2013, 5:20:10 PM11/5/13
to python...@googlegroups.com
2013/11/5 carlynhos77 <carly...@hotmail.com>:
> ola, vinicius agora deu certo...

Boa! \o/


> vou abrir um post no web2py brasil para saber como tratar esse negocio de digitar ponto e não virgula.... o
> usuário tem costume com virgula ne

Já respondi lá. ;-)

Sinval Júnior

unread,
Nov 6, 2013, 1:47:29 PM11/6/13
to python...@googlegroups.com
Caso use linux pode usar buildozer [1], vai versionar, baixar dependência, especificar API mínima, troca de icos, tela de loading...



Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.

#=================================================================+
#!/usr/bin/env python
nome = 'Sinval Júnior'
email = 'sinvalju arroba gmail ponto com'
print nome
print email
#==================================================================+
Reply all
Reply to author
Forward
0 new messages