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,))
应该可行
所以我正在使用 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,))
应该可行