변명은 만개 결과는 한개
[Python, sqlite3] sqlite3.OperationalError: near "텍스트" 발생시 본문
에러로그 전문 ↓
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}\"
요렇게만 해주면 제대로 된다
'공부 > Python' 카테고리의 다른 글
[python] 변수 할당 시 or, and 사용 (0) | 2020.10.25 |
---|