Actualmente estoy escribiendo un juego de rol en Python que usa una base de datos mysql para almacenar información sobre los jugadores. Sin embargo, me he encontrado con un problema.

Código de muestra de cómo se ha configurado la base de datos:

playerinfo Table
userID | money | xp |
  1    | 200   | 20 |
  2    | 100   | 10 |

Estoy tratando de seleccionar la cantidad de dinero solo con el valor. Mi consulta de selección en este momento es

SELECT money FROM playerinfo WHERE id = 1

El código / función completo para recopilar la selección de la información es

def get_money_stats(user_id):
    global monresult
    remove_characters = ["{", "}", "'"]
    try:
        with connection.cursor() as cursor:
            monsql = "SELECT money FROM players WHERE userid = %s"
            value = user_id
            cursor.execute(monsql, value)
            monresult = str(cursor.fetchone())
    except Exception as e:
        print(f"An error Occurred>  {e}")

SALIDA ACTUAL:

{'money': 200}

SALIDA DESEADA:

200

Básicamente, todo lo que quiero seleccionar es el INT / DATA de la fila del jugador (identificado por un ID de usuario único). ¿Cómo puedo hacer eso? La única solución que tengo es reemplazar los personajes con otra cosa, pero realmente no quiero hacer eso porque es increíblemente inconveniente y complicado. ¿Hay otra forma de reformatear / seleccionar los datos?

0
Daniel Tam 1 sep. 2020 a las 14:06

1 respuesta

La mejor respuesta

Parece que buscar una fila te da un diccionario de las columnas seleccionadas con sus valores, lo que me parece el enfoque correcto. Simplemente debe acceder al diccionario con la columna que desea recuperar:

monresult = cursor.fetchone()['money']

Si no desea volver a especificar la columna (que debería), puede obtener los valores del diccionario como una lista y recuperar el primero:

monresult = list(cursor.fetchone().values())[0]

No recomiendo el último enfoque porque depende en gran medida del estado actual de la consulta y es posible que tenga que cambiar si se cambia la consulta.

1
Ajordat 2 sep. 2020 a las 07:27