Ir para conteúdo
Fórum Script Brasil
  • 0

Divida Sobre Dictfetchall()


Guest --itibere --

Pergunta

Guest --itibere --

Olá para todos, sou novo na progrmação python e estou com problemas nessa função (dictfetchall())

uso o mysql com o MySQLdb, codi gop que uso é essa abaixo:

import MySQLdb

conn=MySQLdb.connect("servidor","user","senha")

conn.select_db("base")

query=conn.cursor()

query.execute("select * from tbl")

rs = query.dictfetchall() # busca todas as linhas,

for linha in query:

print linha[0] # valor da primeira coluna

se eu usar "rs = query.fetchall()" , funciona normalmenete mas e se usar a linha "rs = query.dictfetchall() " da o seguibnte erro:

AttributeError: 'Cursor' object has no attribute 'dictfetchall'

Traceback (innermost last):

File "C:\itibere\progetoPy\conexaodb.py", line 1, in ?

import MySQLdb

File "C:\itibere\progetoPy\conexaodb.py", line 9, in ?

rs = query.dictfetchall() # busca todas as linhas,

Onde está o erro?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Este link não é o da documentação do mysqldb.

A especificação da API não inclui um método dictfetchall e provavelmente o mysqldb não o implementa:

http://www.python.org/dev/peps/pep-0249/

O psycopg2, uma das interfaces para o postgresql, implementa DictConnection e DictCursor no módulo extras.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --itibere --
Este link não é o da documentação do mysqldb.

A especificação da API não inclui um método dictfetchall e provavelmente o mysqldb não o implementa:

http://www.python.org/dev/peps/pep-0249/

O psycopg2, uma das interfaces para o postgresql, implementa DictConnection e DictCursor no módulo extras.

Nesse caso, como faço para usar no fetchall, o nome do campo ao invés do seu index, digo isso porque estou acostumando a programar com php, e sempre uso o nome do campo, por ser mais amigave.

ou não tem essa opção no python.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Não é o python que não tem esta opcão, é o mysqldb que não tem. O psycopg2 por exemplo tem.

Mas eu achei uma função que eu acho que resolve esta lacuna no mysqldb:

http://mail.python.org/pipermail/python-li...ril/317035.html

Ela recebe um cursor como argumento e devolve uma lista de dicionários.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --itibere --

Obrigado pela ajuda KaKao,

provavelmente o exemplo que pequei usava essa mesma clase que você me enviou, e ocara so não avisou que não fazia parte do MySQLdb, por isso a confusão.

Abraços, vlu mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --itibere --

Desculpe, sei que já to ficanado chato, mas é que preciso fazer o sistema funcionar e aindo não sei bem como programar em python,

eu fiz assim e fucionou normalmente:

import MySQLdb #importa a calse que mnipula o mysql

def dictfetchall(cursor):

'''Takes a MySQLdb cursor and returns the rows as dictionaries.'''

col_names = [ d[0] for d in cursor.description ]

return [ dict(zip(col_names, row)) for row in query.fetchall() ]

conn=MySQLdb.connect("x","xt","x")

conn.select_db("x")

query=conn.cursor()

query.execute("select * from tblplanos")

rs = dictfetchall(query) # busca todas as linhas,

print (rs[0])

isso retornou:

Evaluating 15 lines of code...

{'status': 'a', 'id_plano': 1L, 'dtaEcerramento': datetime.date(2007, 5, 30), 'tituloPlano': 'este \xe9 s\xf3 um teste', 'id_sac_sap': 7L},

que esta correto , mas se substituo a linha print (rs[0]) para print (rs[status]), por exemplo da o erro:

NameError: name 'status' is not defined

Traceback (innermost last):

File "C:\itibere\progetoPy\conexaodb.py", line 1, in ?

import MySQLdb #importa a calse que mnipula o mysql

File "C:\itibere\progetoPy\conexaodb.py", line 14, in ?

print (rs[status]), agora acho que é falha minha.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...