最初に、これは python と postgresql の混合の質問であることを述べたいと思います。私は現在、すべての SQL 関連のものを処理する tortoise-orm を使用していますが、今日は JSONB フィールドへの挿入中にスタックしました。ここに私のテーブルがあります:
class PointsInfo(models.Model):
class Meta:
table = "pt_info"
id = fields.BigIntField(pk=True, index=True)
guild_id = fields.BigIntField(index=True)
kill_points = fields.IntField(default=1)
posi_points = fields.JSONField(default=dict)
default_format = fields.IntField(default=1)
data: fields.ManyToManyRelation["PointsTable"] = fields.ManyToManyField("models.PointsTable", index=True)
class PointsTable(models.Model):
class Meta:
table = "pt_data"
id = fields.BigIntField(pk=True, index=True)
points_table = fields.JSONField()
created_by = fields.DatetimeField()
created_at = fields.DatetimeField(auto_now=True, index=True)
edited_at = fields.DatetimeField(null=True)
channel_id = fields.BigIntField(null=True)
message_id = fields.BigIntField(null=True)
テーブルに行を挿入し、その行をテーブルの列pt_data
に追加したいdata
pt_info
_dict = {'quotient': [1, 20, 20, 40], 'butterfly': [2, 14, 14, 28], '4pandas': [3, 10, 8, 18], 'kite': [4, 10, 5, 15]}
table = await PointsTable.create(points_table=_dict, created_by= 123456789)
points= await PointsInfo.get(id=3)
await points.data.add(table)
しかし、これを行っているときにエラーが発生します:
File "/home/deadshot/softs/softs/total-quotient/Quotient-Bot/.venv/lib/python3.8/site-packages/tortoise/models.py", line 655, in __init__
for key in meta.fields.difference(self._set_kwargs(kwargs)):
File "/home/deadshot/softs/softs/total-quotient/Quotient-Bot/.venv/lib/python3.8/site-packages/tortoise/models.py", line 682, in _set_kwargs
setattr(self, key, field_object.to_python_value(value))
OSError: [Errno 75] Value too large for defined data type
idk なぜ python はその dict を解析できなかったのか
私は tortoise-orm でこれを行っているので、生の SQL でこれを行いたいです。生の SQL の経験はあまりありません。基本は知っていますが、これは私にとって高度です。
ここで何をすべきですか?ここで達成したいことについて生の SQL クエリを書くのを手伝ってもらえますか?
ありがとう。