Question about recovering data from database

Asked

Viewed 281 times

0

Good morning.

I am a beginner in programming and had an opportunity in a project at work to become a developer. The project is only a panel showing some database data from our main application.

I am in doubt precisely on how to recover these data from the database and use as an object. From what I saw, python retrieves the database data as a tuple, using the code below:

sql_listar_pacientes = 'select nm_pessoa_fisica, nr_cpf, nr_identidade, to_char(dt_atualizacao) ' \
                       'from pessoa_fisica where cd_pessoa_fisica in (213117, 54879)'
c.execute(sql_listar_pacientes)
dados = c.fetchall()

How do I translate the tuple into a python object?

To explain further: I have a Patient object and wanted to use the result of this fetchall in the attributes of this object to after this create a list of this object and be able to display this on a web page. It’s a very simple project, but I’m not getting the result of the fetchall to this object.

2 answers

2


Hello, first congratulations and it is important after this project that you start first studying a programming logic and then study the python language, will help you a lot to follow this career as a programmer.

Come to your question, first, you did not specify what would be the goal of the search (result of fetchall), will be a print of this result? , will turn into dictionary? , will turn into a variable that will separate the data?

Not knowing this I will give a general information on how to do, observe the code and try to understand how it works, if you have any more questions edit your post I will reply again.

Follows the code:

#Importo a biblioteca.
import sqlite3

#Faço a criação se não existente ou conecto ao banco de dados se existente.
db = sqlite3.connect('sqlite.sqlite3')

#Crio um cursor.
cursor = db.cursor()

#Crio uma tabela se não existente.
cursor.execute('CREATE TABLE IF NOT EXISTS Teste (nome TEXT, telefone TEXT, email TEXT)')

#Insiro os dados nessa tabela.
cursor.execute('INSERT INTO Teste VALUES ("Pedrinho", "58747475", "[email protected]")')

#Obtenho todos os valores onde o nome seja igual 'Pedrinho'.
info = cursor.execute('SELECT * FROM Teste WHERE nome="Pedrinho"').fetchall()

#Função seleciona o primeiro objeto da lista que retorna do fetchall()
#Em seguida seleciona cada elemento da tupla e carrega em uma variável
#O resultado disso: os dados separados por variável do tipo str (string) são retornados.
def separarPorVariavel(info):
    nome = info[0][0]
    telefone = info[0][1]
    email = info[0][2]
    return nome

#Função seleciona o primeiro objeto da lista que retorna do fetchall()
#Em seguida seleciona cada elemento da tupla e carrega em uma variável
#Em seguida cria e retorna um dicionario, que diferente da tupla é um objeto mutável.
def separarPorDicionario(info):
    nome = info[0][0]
    telefone = info[0][1]
    email = info[0][2]
    return {'nome': nome, 'telefone': telefone, 'email': email}

#Função cria uma lista vazia, em seguida percorre por cada elemento da primeira tupla resultado do fetchall()
#Em cada elemento percorrido é adicionada a lista criada anteriormente com o método append
#Em seguida retorna a lista dos objetos, a lista funciona igual a tupla mas é do tipo mutável.
def separarPorLista(info):
    lista = []
    for i in info[0]:
        lista.append(i)
    return lista

let’s also see the behavior of outputs:

input: print(separarPorVariavel(info))
output: Pedrinho
input: print(separarPorDicionario(info)['nome'])
output: Pedrinho
input: print(separarPorLista(info)[0])
output: Pedrinho

0

Python is a language where the proposal is to have clear, light writing and be very productive.

Try to understand best practices for Python, both for algorithms (writing) and for data structures.

Since you didn’t specify the basis, or I failed to observe, I’ll show you an example for Mysql, knowing that DBMS doesn’t matter, because Python treats it transparently.

First of all, run the command line python -m pip install mysql to make libraries available to Mysql.

import mysql.connector  # Usado para estabelecer conexão com o Servidor MySQL.

server_ip = "[SEU_ENDEREÇO_DO_SERVIDOR]" # Sem os colchetes, é claro.
base_dados = "[SUA_BASE_DE_DADOS]" # Sem os colchetes, é claro.
usuario = "[SEU_USUÁRIO]" # Sem os colchetes, é claro.
senha = "[SUA_SENHA]" # Sem os colchetes, é claro.

query = "[SUA_QUERY_AQUI]" # Sem os colchetes, é claro.

try:
    conn = mysql.connector.connect(host=server_ip, database=base_dados, user=usuario, 
    passwd=senha)
    cursor = conn.cursor()
    cursor.execute(query)

    rows = cursor.fetchall()

    if cursor.rowcount > 0:
        for row in rows:
            print(row)
    else;
        print("Sem resultados para a query...")

except Error as e:
    print(e) # AQUI É SÓ PRA MOSTRAR O ERRO, SE HOUVER.

finally:
    cursor.close()
    conn.close()



You can use the class python_mysql_dbconfig to make the configuration more user friendly and hidden code. Hardcoding is not very beautiful and this class helps in this.

I suggest you turn this code structure into a function that accepts the query and returns a data structure from Pandas: the Dataframe.

I suggest reading the item https://stackoverflow.com/a/37730334/13123211 to help with the Dataframe issue.

For this last application you will need to install the library pymysql with the command python -m pip install pymysql.

Your application will look very professional.

I hope I’ve helped.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.