Query Not Supported: invalid literal for long() with base 10: 'BR'

45 views
Skip to first unread message

Márcio Luis Dresch

unread,
Feb 15, 2017, 7:26:35 AM2/15/17
to web2py-users-brazil
Bom dia, sou novo em programação e principalmente em Web2py. Antes de começar a desenvolver o programa maior estou fazendo testes com pequenos códigos. Estou com um problema e não estou conseguindo achar a solução e por isso gostaria de uma ajuda. Já fiz várias pesquisas mas nada. Segue os que fiz e desde já agradeço a quem puder ajudar.

db.py

    Pais = db.define_table('pais',
        Field('pais_nome', 'string', label='Nome do País'),
        Field('pais_sigla', 'string', label='Sigla do País'),
        Field('pais_ddi', 'integer', label='Código DDI'),
        Field('pais_bandeira', 'upload', label='Imagem Bandeira do País')
        )

    Estado = db.define_table('estado',
        Field('estado_nome', 'string', label='Nome do Estado'),
        Field('estado_sigla', 'string', label='Sigla do Estado'),
        Field('pais_sigla', 'reference pais', label='Sigla do País'),
        Field('estado_cep1', 'string', label='Cep1 - Faixa Inicial'),
        Field('estado_cep2', 'string', label='Cep2 - Faixa Final'),
        Field('estado_bandeira', 'upload', label='Imagem Bandeira do Estado')
        )

validator.py

    ## Validadores de Pais
    db.pais.pais_nome.requires = [IS_NOT_EMPTY(),
                            IS_NOT_IN_DB(db, db.pais.pais_nome)]
    db.pais.pais_bandeira.requires = IS_EMPTY_OR(IS_IMAGE())
                             
    ## Validadores de Estado
    db.estado.estado_nome.requires = [IS_NOT_EMPTY(),
                            IS_NOT_IN_DB(db, db.estado.estado_nome)]
    db.estado.pais_sigla.requires = [IS_NOT_EMPTY(),
                            IS_IN_DB(db, 'pais.id', '%(pais_sigla)s')]
    db.estado.estado_bandeira.requires = IS_EMPTY_OR(IS_IMAGE())

default.py

    ### Pais    
    def novo_pais():
        form = SQLFORM(Pais)
        if form.process().accepted:
            session.flash = 'Novo País Cadastrado: %s' % form.vars.titulo
            redirect(URL('novo_pais'))
        elif form.errors:
            response.flash = 'Erros no formulário!'
        else:
            if not response.flash:
                response.flash = 'Preencha o formulário!'
        return dict(form=form)

    def ver_pais():
        grid = SQLFORM.grid(Pais, user_signature=False, create=True, deletable=True, editable=True)
        return dict(grid=grid)

    ### Estado
    def novo_estado():
        form = SQLFORM(Estado)
        if form.process().accepted:
            session.flash = 'Novo Estado Cadastrado: %s' % form.vars.titulo
            redirect(URL('novo_estado'))
        elif form.errors:
            response.flash = 'Erros no formulário!'
        else:
            if not response.flash:
                response.flash = 'Preencha o formulário!'
        return dict(form=form)

    def ver_estado():
        grid = SQLFORM.grid(Estado, user_signature=False, create=True, deletable=True, editable=True)
        return dict(grid=grid)

ver_estado.html
    {{extend 'layout.html'}}

    <h1>Estados</h1>

    {{=grid}}   

O erro ocorre quando acesso a página do ver_estado : Query Not Supported: invalid literal for long() with base 10: 'BR'
Aparece que há duas páginas mas não aparece nada. Somente o erro mencionado
  

Carlos Costa

unread,
Feb 15, 2017, 8:23:28 AM2/15/17
to web2py-us...@googlegroups.com
Provavelmente você criou a primeira vez o campo sigla país sem informar o tipo.
Assim ele criou com o tipo padrão que é string e você deve ter armazenado 'BR' nesse campo.
Depois você deve ter alterado esse campo para 'reference'.
Reference tem que ser inteiro e o campo tem que conter um id presente em outra tabela, no caso, tabela pais.

A tabela ficou diferente do model. O w2p não conseguiu conciliar isso.
Você pode fazer na mão. Abrindo o banco de dados e mudando a estrutura e conteúdo da tabela para o correto.
Ou pode excluir tudo na pasta databases, para o web2py recriar tudo do zero. 
Se está usando sqlite você perderá tudo que está no banco, então considere fazer um backup do banco.

--
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
<º))><

Márcio Luis Dresch

unread,
Feb 15, 2017, 10:02:38 AM2/15/17
to web2py-users-brazil
Obrigado Carlos, sempre informo o tipo. Criei ele como 'string' e sim recriei a tabela novamente, como a que enviei, e em seguida inseri os dados. Se não for pedir demais poderia me dar um exemplo de como mudar isso? Quero que pais_sigla que esta em estado seja um item da tabela pais.

Carlos Costa

unread,
Feb 15, 2017, 2:32:19 PM2/15/17
to web2py-us...@googlegroups.com
Tente primeiro o método mais fácil. O fake_migrate.
Na sua definição de tabela acrescente fake_migrate=True
db.define_table(...., migrate=True, fake_migrate=True)
Depois de mudar, execute aquela página uma vez, se não der erro, pode tirar o fake_migrate e pronto.
Provavelmente você vai ter que reinseir os dados desse campo.

Mais detalhes aqui:

Em 15 de fevereiro de 2017 13:02, Márcio Luis Dresch <marcio...@gmail.com> escreveu:
Obrigado Carlos, sempre informo o tipo. Criei ele como 'string' e sim recriei a tabela novamente, como a que enviei, e em seguida inseri os dados. Se não for pedir demais poderia me dar um exemplo de como mudar isso? Quero que pais_sigla que esta em estado seja um item da tabela pais.

--
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.
Reply all
Reply to author
Forward
0 new messages