【问题标题】:cursor.execute works in scratch file but not in main filecursor.execute 在临时文件中有效,但在主文件中无效
【发布时间】:2021-09-30 08:21:16
【问题描述】:

我正在尝试使用 discord.py 和 sqlite3 作为我的数据库制作一个迷你游戏机器人,但我遇到的问题是,当我使用命令 !deathjoin 时,它首先检查执行该命令的用户是否已经在数据库使用他/她的不和谐 ID,然后将该人添加到数据库中,但是什么时候到达

cursor.execute("""SELECT id FROM DEATHROLL WHERE id=?""",(ide,)) #ide=person's id

它停止运行,更烦人的是,当我通过在前后打印 id 来测试它是否有任何语法错误时

cursor.execute("""SELECT id FROM DEATHROLL WHERE id=?""",(ide,))

运行它只在之前打印它

cursor.execute("""SELECT id FROM DEATHROLL WHERE id=?""",(ide,))

运行,但是当我将它传输到一个临时文件时,该文件也与主文件/文件位于同一目录中,我使用它打印 id 两次含义

cursor.execute("""SELECT id FROM DEATHROLL WHERE id=?""",(ide,))

是正确的。 主文件中的!deathroll命令代码:

connect = sqlite3.connect('Deathroll_Bot3.db')
cursor = connect.cursor()
client = commands.Bot(command_prefix='!')
@client.command()
async def deathjoin(ctx):
    start_currency = 1000
    ide = ctx.author.id
    print("1st", ide)
    cursor.execute("""SELECT id FROM DEATHROLL WHERE id=?""",(ide,))
    print("2nd",ide)
    data = cursor.fetchall()

    if len(data)<= 0:
        print("no data found: inserting data")
        cursor.execute("INSERT INTO DEATHROLL (id,currency) VALUES (?,?)", (ide, start_currency))
        connect.commit()
        print("inserted data")
    else:
        await ctx.send("your already have an account")

暂存文件的完整代码:

import sqlite3
connect = sqlite3.connect('Deathroll_Bot3.db')
cursor=connect.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS DEATHROLL(
                   id INT PRIMARY KEY NOT NULL,
                   currency INT NOT NULL

)""")
ide=798794654698764826
print("1st",ide)
cursor.execute("""SELECT id FROM DEATHROLL WHERE id=?""",(ide,))
print("2nd",ide)

是的,我已经确保我在两个文件上使用来自同一个数据库的同一个表,并且两个文件都在同一个目录中

【问题讨论】:

    标签: python sqlite discord.py


    【解决方案1】:

    这是因为您的变量 connect 不是全局变量,您可以全局定义它,也可以在函数 deathjoin 中声明它,它应该可以工作

    connect = sqlite3.connect('Deathroll_Bot3.db')
    client = commands.Bot(command_prefix='!')
    @client.command()
    async def deathjoin(ctx):
        cursor = connect.cursor()
        start_currency = 1000
        ide = ctx.author.id
        print("1st", ide)
        cursor.execute("""SELECT id FROM DEATHROLL WHERE id=?""",(ide,))
        print("2nd",ide)
        data = cursor.fetchall()
    
        if len(data)<= 0:
            print("no data found: inserting data")
            cursor.execute("INSERT INTO DEATHROLL (id,currency) VALUES (?,?)", (ide, start_currency))
            connect.commit()
            print("inserted data")
        else:
            await ctx.send("your already have an account")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2018-10-18
      相关资源
      最近更新 更多