From 7dacae379ac505484616ce3cfdb21c3f87cc3a6a Mon Sep 17 00:00:00 2001 From: Cinte Date: Sat, 10 Jun 2023 09:53:36 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E5=9C=A8Postgresql=E4=B8=8B=EF=BC=8Cus?= =?UTF-8?q?er=5Ftarget=E5=AD=97=E6=AE=B5=E4=BD=BF=E7=94=A8jsonb=E4=BB=A3?= =?UTF-8?q?=E6=9B=BFjson?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_bison/config/db_model.py | 4 ++-- .../migrations/632b8086bc2b_add_user_target.py | 9 ++++++++- ...67c38b3f39c2_make_user_target_not_nullable.py | 16 +++++++++++++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/nonebot_bison/config/db_model.py b/nonebot_bison/config/db_model.py index e1feade..d5730cf 100644 --- a/nonebot_bison/config/db_model.py +++ b/nonebot_bison/config/db_model.py @@ -1,10 +1,10 @@ import datetime from pathlib import Path -from typing import Optional from nonebot_plugin_datastore import get_plugin_data from nonebot_plugin_saa.utils import PlatformTarget from sqlalchemy import JSON, ForeignKey, String, UniqueConstraint +from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import Mapped, mapped_column, relationship from ..types import Category, Tag @@ -15,7 +15,7 @@ get_plugin_data().set_migration_dir(Path(__file__).parent / "migrations") class User(Model): id: Mapped[int] = mapped_column(primary_key=True) - user_target: Mapped[dict] = mapped_column(JSON) + user_target: Mapped[dict] = mapped_column(JSON().with_variant(JSONB, "postgresql")) subscribes: Mapped[list["Subscribe"]] = relationship(back_populates="user") diff --git a/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py b/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py index 9a867ac..716aa22 100644 --- a/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py +++ b/nonebot_bison/config/migrations/632b8086bc2b_add_user_target.py @@ -7,6 +7,7 @@ Create Date: 2023-03-20 00:39:30.199915 """ import sqlalchemy as sa from alembic import op +from sqlalchemy.dialects.postgresql import JSONB # revision identifiers, used by Alembic. revision = "632b8086bc2b" @@ -19,7 +20,13 @@ def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op: batch_op.drop_constraint("unique-user-constraint", type_="unique") - batch_op.add_column(sa.Column("user_target", sa.JSON(), nullable=True)) + batch_op.add_column( + sa.Column( + "user_target", + sa.JSON().with_variant(JSONB, "postgresql"), + nullable=True, + ) + ) # ### end Alembic commands ### diff --git a/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py b/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py index a08e20a..8d4daf1 100644 --- a/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py +++ b/nonebot_bison/config/migrations/67c38b3f39c2_make_user_target_not_nullable.py @@ -7,7 +7,7 @@ Create Date: 2023-03-20 11:08:42.883556 """ import sqlalchemy as sa from alembic import op -from sqlalchemy.dialects import sqlite +from sqlalchemy.dialects.postgresql import JSONB # revision identifiers, used by Alembic. revision = "67c38b3f39c2" @@ -16,11 +16,17 @@ branch_labels = None depends_on = None +def jsonb_if_postgresql_else_json(): + return sa.JSON().with_variant(JSONB, "postgresql") + + def upgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op: batch_op.alter_column( - "user_target", existing_type=sqlite.JSON(), nullable=False + "user_target", + existing_type=jsonb_if_postgresql_else_json(), + nullable=False, ) # ### end Alembic commands ### @@ -29,6 +35,10 @@ def upgrade() -> None: def downgrade() -> None: # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("nonebot_bison_user", schema=None) as batch_op: - batch_op.alter_column("user_target", existing_type=sqlite.JSON(), nullable=True) + batch_op.alter_column( + "user_target", + existing_type=jsonb_if_postgresql_else_json(), + nullable=True, + ) # ### end Alembic commands ###