discord.py SQLite 数据库

discord.py SQLite database

所以我正在使用 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 是为了检查标签是否已经存在,但它不存在。它也不做任何其他事情。这是 table 现在的样子:

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

看来您是通过 tags_name

引用了 tag_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,))

应该可行