我没有碰任何东西,一开始数据库只是停止被读取。我解决了这个问题,现在只是创建了一个空数据库,没有用户表。我没有碰代码本身;实际上 15 分钟前一切都正常。也许我忘了'把它放在某个地方
绝对路径也不起作用,无论如何都会创建一个空数据库
import sqlite3 as sq
db = sq.connect("tg.db")
cur = db.cursor()
async def db_start():
cur.execute("""
CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
tg_id INTEGER,
uid INTEGER
)
""")
db.commit()
错误sqlite3.OperationalError: no such table: users
当尝试查找正在使用的数据库时,一切都很好。显示我的数据库的路径。也是到处处理,但是处理不了,因为空的。
from pathlib import Path
import sqlite3 as sq
db_fn = Path("tg.db")
db = sq.connect(db_fn)
cur = db.cursor()
if not (db_fn.exists() and db_fn.stat().st_size > 0):
raise FileNotFoundError(f"file [{db_fn.resolve()}] is empty or doesn't exist!")
cur = db.cursor()
cur.execute("SELECT * FROM users")
代码
@router.message(Command('character'),
StateFilter(None)
)
async def enkanet(message: Message, state: FSMContext):
await state.set_state(Reg.name)
await message.answer('Напиши свой UID')
print("card request")
@router.message(
StateFilter(Reg.name)
)
async def character_card(message: Message,
state: FSMContext,
) -> None:
await state.update_data(name=message.text)
data = await state.get_data()
uid = data["name"]
tgid = message.from_user.id
try:
await tg.add(id=uid, tgid=tgid)
await state.clear()
await message.bot.send_chat_action(
chat_id=message.chat.id,
action=ChatAction.TYPING
)
await message.answer(
"ЖДИ\n\n\nСекунд 20"
)
style_1 = cur.execute("SELECT style FROM users WHERE tg_id = ?", (tgid,)).fetchone()[0]
card1 = await card_generate(uid=uid, style=style_1)
if card1[0] == 1:
await message.answer(card1[1])
elif card1[0] == 2:
await message.answer(card1[1])
else:
await message.answer(card1[0], reply_markup=card1[1])
except OperationalError:
await state.clear()
return message.reply(
'Выход\nНапиши свой UID ЦИФРАМИ\n/character'
)
代码2
import sqlite3 as sq
db = sq.connect('tg.db')
cur = db.cursor()
async def db_start():
cur.execute("""
CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
tg_id INTEGER,
uid INTEGER,
style INTEGER
)
""")
db.commit()
async def add(id, tgid):
info = cur.execute('SELECT * FROM users WHERE tg_id=?',(tgid, )).fetchone()
if info is None:
cur.execute(f"INSERT INTO users (uid, tg_id) VALUES (({id}), ({tgid}))")
db.commit()
else:
sqlite_update_query = f"""UPDATE users SET uid = {id} WHERE tg_id = {tgid}"""
cur.execute(sqlite_update_query)
db.commit()
if sq.OperationalError:
return
return