Python + MySQLdb = Dúvidas.

1. Python + MySQLdb = Dúvidas.

Vinicus S Moraes
vsmoraes

(usa Arch Linux)

Enviado em 03/11/2008 - 17:48h

Opa, fizeram uma solicitação para que eu fizesse um programinha simples mas que rodasse no Linux e, também, no Windows.
Pensei logo em Python + GTK!
Fiz a interface no Glade, tudo funcional já. Agora fui pro banco, PROBLEMA. ;\

Estou (tentando) utilizando o MySQLdb para a conexão com o banco, consigo fazer a conexão, executar queries e etc...
Porém o resultado eu só consigo pegar pelo índice da coluna, exemplo:

>>> dbCursor.execute("SELECT username, password FROM users LIMIT 10")
>>> result = dbCurdor.fetchone()

Query executada, agora eu quero dar um 'print' no username

>>> print result[0]

Não há uma forma de eu conseguir algo desse tipo:

>>> print result["username"]

Usando o nome da coluna ao invés do índice da mesma?


Agradeço desde já.




  


2. Re: Python + MySQLdb = Dúvidas.

Denis Doria
thuck

(usa Debian)

Enviado em 03/11/2008 - 21:29h

Não... pois o retorno da querie é sempre uma tupla, ou seja, é necessário o índice para identificar o valor, se o retorno fosse um tipo dicionário até daria certo, oq vc quer.
O que você pode fazer, mas acho perda de tempo é criar um username=<valor_do_índice>; mas com certeza isso seria besteira.


3. Re: Python + MySQLdb = Dúvidas.

Christian S. Perone
tarantula

(usa Slackware)

Enviado em 13/02/2009 - 16:27h

Errado, pode sim:

>>> import MySQLdb
>>> import MySQLdb.cursors
>>> db_obj = MySQLdb.connect(user='xx', passwd='xx', db='xx', cursorclass=MySQLdb.cursors.DictCursor)
>>> cursor = db_obj.cursor()
>>> cursor.execute("SELECT a,b FROM tabela")
>>> first = cursor.fetchone()
{'a':'valor de a', 'b':'valor de b'}

Há outra maneira também eu acho, passando "how=1" para o fetch_row, não sei se o fetchone aceita isto também.


4. Re: Python + MySQLdb = Dúvidas.

Denis Doria
thuck

(usa Debian)

Enviado em 15/02/2009 - 23:57h

Sim e não... o MySQLdb faz isso, porém isso é uma extensão do mesmo, essa extensão não é prevista na pep 249, usar algo que não está na pep é desaconselhável, pois se um dia precisar mudar de mysql p/ outro banco e o mesmo não suportar esse tipo de extensão vc terá q reescrever grande parte do seu código.
O motivo p/ não usar dicionário como retorno de uma query, está no FAQ da pep 249:

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

Nas palavras da "pep":
"As a result, accessing the columns through dictionary keys varies between databases and makes writing portable code impossible."



5. Re: Python + MySQLdb = Dúvidas.

Christian S. Perone
tarantula

(usa Slackware)

Enviado em 16/02/2009 - 13:50h

O contexto da pergunta, e que está no assunto dela é "Python + MySQLdb", mesmo não aconselhável pelo PEP, não quer dizer que ele não deva usar ou saber.

A tua resposta foi "Não... pois o retorno da querie é sempre uma tupla", o que é errado no caso do MySQLdb, pois você pode utilizar dicionários, que era o objetivo do tópico.

Além do mais, se ele quisesse uma interoperabilidade entre bancos, deveria estar usando algum ORM e não acesso direto ao MySQLdb.


6. Re: Python + MySQLdb = Dúvidas.

Denis Doria
thuck

(usa Debian)

Enviado em 16/02/2009 - 18:35h

Sim, ele deve saber, não, ele não deve usar.
Yep, concordo deveria ter me expressado melhor, e dito que a pep desaconselha fortemente o uso de dicionários, e concordo plenamente com oq a pep diz.
Usar ORM é interessante...


7. Vlw pela dica

Rafael Massao Okumura
massao

(usa Slackware)

Enviado em 06/09/2009 - 01:29h

Confesso que é meio cansativo ficar olhando no índice ainda mais pra quem tá começando [:d]






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts