변명은 만개 결과는 한개

[Python, sqlite3] sqlite3.OperationalError: near "텍스트" 발생시 본문

공부/Python

[Python, sqlite3] sqlite3.OperationalError: near "텍스트" 발생시

노마십가 2021. 8. 1. 21:38
728x90
반응형

에러로그 전문 ↓

더보기

Ignoring exception in command "커맨드명":
Traceback (most recent call last):
  File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "c:\bot\EPPN\Inven-bot\invenBot.py", line 120, in "커맨드명"
    cur.execute(
sqlite3.OperationalError: near "테스트": syntax error

The above exception was the direct cause of the following exception:
  File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 859, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\PC\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: OperationalError: near "테스트": syntax error

 

파이썬 디스코드 봇 만드는 와중에 sqlite3 를 사용중인데,

커맨드로 str를 받은 뒤 해당 str를 insert 시도시 "sqlite3.OperationalError: near ~" 에러 발생함.

 

 

문제 코드 ↓

@bot.command()
async def 상점부여(ctx, mem: discord.Member, value: int, *reason):
	...
    reason = " ".join(reason)
    ...
    # input values to point table
    cur.execute(
        f"insert into point values ({user_id}, {index}, {date}, {value}, {reason}, {conferrer})"
    )
    ...

 

에러 메세지

> sqlite3.OperationalError: near "테스트": syntax error

 

join 으로 합친 reason 값을 제대로 찍히나,

insert reason 에 들어가는 str (가나다ㅣ 테스트 중 입니다 가나다 @34ㅐ0 $^abc) 가 제대로 안들어간것(첫번째 elem만 들어감)이었다

 

수정 코드↓

@bot.command()
async def 상점부여(ctx, mem: discord.Member, value: int, *reason):
	...
    reason = " ".join(reason)
    ...
    # input values to point table
    cur.execute(
        f"insert into point values ({user_id}, {index}, {date}, {value}, \"{reason}\", {conferrer})"
    )
    ...
\"{reason}\"

요렇게만 해주면 제대로 된다

728x90
반응형

'공부 > Python' 카테고리의 다른 글

[python] 변수 할당 시 or, and 사용  (0) 2020.10.25