【问题标题】:discord.py SQLite databasediscord.py SQLite 数据库
【发布时间】:2021-02-18 05:03:56
【问题描述】:

所以我正在使用 SQLite 在 discord.py 中制作一个标签机器人,但我遇到了一个问题。这是到目前为止的代码:

sql.execute(f'select tag_name from tags_list where tag_name ={name}')
does_exist = sql.fetchone()

if does_exist is None:
    sql.execute('insert into tags_list(tags_name, tags_content) values(?,?)', (name, content))
    db.commit()
    await ctx.send(f":white_check_mark: Created tag with the name `{name}`")
else:
    await ctx.send(f"Tag named `{name}` already exists!")

问题是does_exist 是用来检查标签是否已经存在,但它不存在。它也不做任何其他事情。这就是表格现在的样子:

代码在没有 if else 语句的情况下工作。我无法解决问题,有人可以帮忙吗?

【问题讨论】:

    标签: python sql sqlite discord.py discord.py-rewrite


    【解决方案1】:

    所以看起来您将tag_name 列称为tags_name

    sql.execute(f'select tag_name from tags_list where tag_name ={name}')
    #                    ^^^^^^^^                      ^^^^^^^^
    does_exist = sql.fetchone()
    
    if does_exist is None:
        sql.execute('insert into tags_list(tags_name, tags_content) values(?,?)', (name, content))
        #                                  ^^^^^^^^^
        db.commit()
        await ctx.send(f":white_check_mark: Created tag with the name `{name}`")
    else:
        await ctx.send(f"Tag named `{name}` already exists!")
    

    请告诉我这是否有效

    编辑:

    所以我根据你的代码创建了一个测试版本,它工作正常:

    import sqlite3
    
    conn = sqlite3.connect('test.db')
    c = conn.cursor()
    
    c.execute("""CREATE TABLE IF NOT EXISTS tag_list (
                 tag_name string NOT NULL,
                 tag_content
                 )""")
    
    for i in range(0, 2):
        name = 'donut'
        content = 'choclate cream'
        print("Name:", name, "Content:", content)
    
        c.execute('select tag_name from tag_list where tag_name = ?', (name,))
        does_exist = c.fetchone()
        print("Exists?", does_exist)
    
        if does_exist is None:
            c.execute('insert into tag_list(tag_name, tag_content) values(?, ?)', (name, content))
            conn.commit()
            print('Created', name)
        else:
            print(name, 'already exists')
    

    输出:

    Name: donut Content: choclate cream
    Exists? None
    Created donut 
    
    Name: donut Content: choclate cream
    Exists? ('donut',)
    donut already exists
    

    我认为问题可能出在这一行:

    sql.execute(f'select tag_name from tags_list where tag_name ={name}')
    
    # Change it to
    
    sql.execute('select tag_name from tags_list where tag_name =t', (name,))
    

    应该可以的

    【讨论】:

    • 我更正了列名,但它似乎仍然不起作用。
    • 我认为损坏的部分是sql.execute(f'select tag_name from tags_list where tag_name ={name}') 部分
    猜你喜欢
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多