mysql - 将 int 类型的变量带到 MySQL 到 Python
问题描述
我今天开始使用 MySQL。我正在一个不和谐机器人上创建我自己的关卡系统(我使用 discord.py),我无法从我的数据库中导入我需要的数字。
import discord
import random
from discord import client
from discord.ext import commands
import mysql.connector
from discord.utils import get
from random import choice
token = 'token'
client = commands.Bot(command_prefix='°')
levelsystem_db = mysql.connector.connect(
host="localhost",
user="root",
passwd="pass",
database="userlevels",
auth_plugin="mysql_native_password"
)
@client.event
async def on_ready():
print('Bot online')
print(levelsystem_db)
@client.event
async def on_message(message):
if message.author.bot:
return
xp = generateXP()
print(f"{message.author.name} ha ricevuto {str(xp)} xp")
cursor = levelsystem_db.cursor()
cursor.execute(f"SELECT user_xp FROM users WHERE client_id = {str(message.author.id)}")
result = cursor.fetchall()
print(result)
print(len(result))
if (len(result) == 0):
print("L'utente non è stato aggiunto al database.")
cursor.execute(f"INSERT INTO users VALUES({str(message.author.id)} ,{str(xp)} , 0)")
levelsystem_db.commit()
print("Aggiunta completata")
await level_up(cursor, xp, message.author, message)
else:
newXP = result[0][0] + xp
print(f"Gli xp di {message.author.name} sono aggiornati a {newXP}")
cursor.execute(f"UPDATE users SET user_xp = {str(newXP)} WHERE client_id = {str(message.author.id)}")
levelsystem_db.commit()
print(f"Aggiornamento degli xs di {message.author.name} completato.")
await level_up(cursor, newXP, message.author, message)
def generateXP():
return random.randint(5,10)
async def level_up(cursor, NewXP, user, message):
cursor.execute(f"SELECT user_level FROM users WHERE client_id = {str(message.author.id)}")
lvl_start = cursor.fetchall()
lvl_end = int(NewXP ** (1/4))
print(str(lvl_start))
print(str(lvl_end))
if (str(lvl_start) < str(lvl_end)):
await message.channel.send(f"{user.mention} è salito al livello {lvl_end}")
print(f"Il livello di {message.author.name} si sta aggiornando al livello {lvl_end}")
cursor.execute(f"UPDATE users SET user_level = {str(lvl_end)} WHERE client_id = {str(message.author.id)}")
levelsystem_db.commit()
print(f"Aggiornamento del livello di {message.author.name} completato.")
else:
print("Non è abbastanza!")
pass
给我带来问题的部分是:
cursor.execute(f"SELECT user_level FROM users WHERE client_id = {str(message.author.id)}")
lvl_start = cursor.fetchall()
lvl_end = int(NewXP ** (1/4))
print(str(lvl_start))
print(str(lvl_end))
我希望 lvl_start 变量将我带回整数和列表变量。我应该0
从不print (str (lvl_start))
得到[(0,)]
。我不知道我是否说清楚了,但我想解决这个问题。有办法吗?
解决方案
正如我所使用的那样mysql-python
,它返回一个嵌套有元组的列表。如果我们用它来选择一行,它会返回一个嵌套了长度为 2 的元组的列表,其中第一个元素是行值,第二个是空白。因此,我建议您至少选择 2 行,然后使用嵌套列表的索引列表lvl_start[0][0]
。
推荐阅读
- delphi - Delphi IDE 冻结代码完成并跳转到声明
- nestjs - NestJs/TypeORM:如何保存多对多
- swift - Typescript 联合类型的 Swift 等价物是什么?
- java - Java 构造问题 findmissing 元素
- arrays - Javascript将一个数组中的元素推入另一个数组
- css - tablerow 背景颜色不适用于 tabledata #css
- swift - 如何从自定义上滑菜单中显示控制器
- python - 将 csv 数据转换为逗号的单独列表
- html - vs代码中的实时服务器
- c++ - 在 MPI 上下文中使用 boost-odeint 而不使用 mpi_state 会导致自适应步进器的不同时间步长