実現したいこと
MQLで出ているunrecognized tokenエラーを解決したい
前提
Pythonのsqlite3を利用してデータベース操作の関数を実装しています。
機能全体で実現したいことは、データベースのUPDATE関数を作成し、関数の入力から合致したIDのデータを書き換える関数を実装したいです。
INSERTやDERETE、簡易的なview関数(該当するIDのデータを表示する関数)は作成できたのですが、UPDATEを実装した関数のみエラーが出てしまいます。
SQLに関しては初めて触っていて、SQL側で起こっているエラーなのかが全く検討つかずエラーを解決できません。
どなたか手を貸していただけると幸いです。よろしくお願いします。
teratail自体も初めて使っているので、情報などに不備があるとは思いますがその時は質問にも答えさせていただきますのでよろしくお願いいたします。
データベースの作成にDjangoを用いており、Djangoの圏外から別の.pyを用いてアクセスしている状況です。
発生している問題・エラーメッセージ
File "/.../dev/AutoPost/AutoPost/../crawler/test.py", line 34, in <module> postdb.DB_update('001', data) File "/.../dev/AutoPost/crawler/postdb.py", line 24, in DB_update cursor.execute(sql) sqlite3.OperationalError: unrecognized token: "{"
該当のソースコード
Python3
1# postdb.py データベース操作関連 2import sqlite3 3import pandas as pd 4 5... 6 7# 動作成功しているデータベースにデータを登録する関数 8# id(str) : データベースでprimary_keyとして登録しているデータ 9# content(str) : json形式で書かれたstrデータ 10 11def DB_register(id, content): 12 ins = (id, content) 13 cursor.execute(f'''INSERT INTO {tablename} values(?,?)''', ins) 14 15 16# 現在エラーが出ているデータベースの情報を更新する関数 17# id(str) : データベースでprimary_keyとして登録しているデータ 18# content(str) : json形式で書かれたstrデータ 19 20def DB_update(id, content): 21 sql = f''' 22 UPDATE {tablename} 23 SET postContent = {content} 24 WHERE postID = {id} 25 ''' 26 cursor.execute(sql) 27 28... 29 30dbname = ('../AutoPost/dataList.sqlite3') 31tablename = 'APapp_PostData' 32conn = sqlite3.connect(dbname, isolation_level=None) 33cursor = conn.cursor()
Python3
1# models.py Django内のファイル django > app > models.py 2from django.db import models 3 4... 5 6class PostData(models.Model): 7 postID = models.IntegerField(primary_key=True) 8 postContent = models.TextField()
Python3
1# test.py 動作テストに使用しているPythonファイル 2import postdb 3import userdb 4 5data = '''{ 6 "sample1" : "test", 7 "sample2" : { 8 "sample3" : "test", 9 "sample4" : "test" 10 }, 11 "sample5" : "test", 12 ... 13}''' 14 15postdb.DB_update('001', data) 16postdb.DB_view()
試したこと
はじめに、変数dataの中身を変えてテストしながら開発していたのでjsonの文法を確認しましたが、正常でした。
次に、データベースを初期化し
Python3
1postdb.DB_register('001', data)
を実行したところ正常に動作しました。
環境
Macbook Pro 2019
macOS Ventura 13.0.1
Python 3.9.6
Django 4.1.5
django.db.backends.sqlite3

回答2件
あなたの回答
tips
プレビュー