Skip to content

[BUG]使用 PG 时,如果model 在不同 schema 里面,则 nb orm upgrade 正常,而 nb orm check 会一直报错 #35

@MerlinCN

Description

@MerlinCN

默认(public)下的 model

Image

其他 schema(这里我设置了为 gv)

Image Image

生成的迁移文件正常

Image

数据库结构也正常

Image

但是再次运行 bot(等效 nb orm check)会一直报错

目前临时解决办法是都放到 public 里面

日志

(flashbot)  merlin@merlins-MacBook-Pro  ~/HajimiBot   dev ±  nb orm revision -m "init"
使用 Python: /Users/merlin/HajimiBot/.venv/bin/python
02-04 17:48:37 [SUCCESS] nonebot | NoneBot is initializing...
02-04 17:48:37 [INFO] nonebot | Current Env: prod
02-04 17:48:38 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_localstore"
02-04 17:48:38 [SUCCESS] nonebot | Succeeded to load plugin "group_verification" from "src.plugins.group_verification"
02-04 17:48:38 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_apscheduler"
02-04 17:48:38 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_orm"
  Generating /var/folders/1z/9d78dbgj09x6mn3yc180bffw0000gn/T/tmpb4162o0x/a08596fdd90d_init.py ...  done
(flashbot)  merlin@merlins-MacBook-Pro  ~/HajimiBot   dev ±  nb run                     
使用 Python: /Users/merlin/HajimiBot/.venv/bin/python
02-04 17:49:15 [SUCCESS] nonebot | NoneBot is initializing...
02-04 17:49:15 [INFO] nonebot | Current Env: prod
02-04 17:49:16 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_localstore"
02-04 17:49:16 [SUCCESS] nonebot | Succeeded to load plugin "group_verification" from "src.plugins.group_verification"
02-04 17:49:16 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_apscheduler"
02-04 17:49:16 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_orm"
02-04 17:49:16 [SUCCESS] nonebot | Running NoneBot...
02-04 17:49:16 [SUCCESS] nonebot | Loaded adapters: OneBot V11
02-04 17:49:16 [INFO] uvicorn | Started server process [89632]
02-04 17:49:16 [INFO] uvicorn | Waiting for application startup.
目标数据库未更新到最新迁移, 是否更新? [y/N]: y
02-04 17:49:18 [WARNING] group_verification | 无法初始化B站会话: 登录凭证不存在或无效
02-04 17:49:18 [WARNING] group_verification | B站登录凭证不存在或无效,请发送"登录"命令进行登录
02-04 17:49:18 [INFO] nonebot_plugin_apscheduler | Scheduler Started
02-04 17:49:18 [INFO] uvicorn | Application startup complete.
02-04 17:49:18 [INFO] uvicorn | Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
02-04 17:49:19 [INFO] uvicorn | 127.0.0.1:57772 - "WebSocket /onebot/v11/ws" [accepted]
02-04 17:49:19 [INFO] nonebot | OneBot V11 | Bot 3648991638 connected
02-04 17:49:19 [INFO] websockets | connection open
^C02-04 17:49:22 [INFO] uvicorn | Shutting down
02-04 17:49:22 [WARNING] nonebot | OneBot V11 | WebSocket for Bot 3648991638 closed by peer
02-04 17:49:22 [INFO] websockets | connection closed
02-04 17:49:22 [INFO] uvicorn | Waiting for application shutdown.
02-04 17:49:22 [INFO] nonebot_plugin_apscheduler | Scheduler Shutdown
02-04 17:49:22 [INFO] uvicorn | Application shutdown complete.
02-04 17:49:22 [INFO] uvicorn | Finished server process [89632]
(flashbot)  merlin@merlins-MacBook-Pro  ~/HajimiBot   dev ±  nb run                     
使用 Python: /Users/merlin/HajimiBot/.venv/bin/python
02-04 17:49:29 [SUCCESS] nonebot | NoneBot is initializing...
02-04 17:49:29 [INFO] nonebot | Current Env: prod
02-04 17:49:29 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_apscheduler"
02-04 17:49:30 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_localstore"
02-04 17:49:30 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_orm"
02-04 17:49:30 [SUCCESS] nonebot | Succeeded to load plugin "group_verification" from "src.plugins.group_verification"
02-04 17:49:30 [SUCCESS] nonebot | Running NoneBot...
02-04 17:49:30 [SUCCESS] nonebot | Loaded adapters: OneBot V11
02-04 17:49:30 [INFO] uvicorn | Started server process [89844]
02-04 17:49:30 [INFO] uvicorn | Waiting for application startup.
02-04 17:49:30 [INFO] nonebot_plugin_apscheduler | Scheduler Started
02-04 17:49:30 [ERROR] uvicorn | Traceback (most recent call last):
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/starlette/routing.py", line 694, in lifespan
    async with self.lifespan_context(app) as maybe_state:
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/merlin/.local/share/uv/python/cpython-3.12.12-macos-aarch64-none/lib/python3.12/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/fastapi/routing.py", line 153, in merged_lifespan
    async with original_context(app) as maybe_original_state:
               ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/merlin/.local/share/uv/python/cpython-3.12.12-macos-aarch64-none/lib/python3.12/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/nonebot/drivers/fastapi.py", line 154, in _lifespan_manager
    await self._lifespan.startup()
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/nonebot/internal/driver/_lifespan.py", line 66, in startup
    await self._run_lifespan_func(self._startup_funcs)
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/nonebot/internal/driver/_lifespan.py", line 55, in _run_lifespan_func
    await cast(ASYNC_LIFESPAN_FUNC, func)()
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/nonebot_plugin_orm/__init__.py", line 92, in init_orm
    await greenlet_spawn(migrate.check, alembic_config)
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 203, in greenlet_spawn
    result = context.switch(value)
             ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/merlin/HajimiBot/.venv/lib/python3.12/site-packages/nonebot_plugin_orm/migrate.py", line 567, in check
    raise AutogenerateDiffsDetected(
nonebot_plugin_orm.exception.AutogenerateDiffsDetected: 检测到新的升级操作:
[('add_table',
  Table('gv_blacklist', MetaData(), Column('id', Uuid(), table=<gv_blacklist>, primary_key=True, nullable=False, default=CallableColumnDefault(<function uuid4 at 0x10a0c5e40>)), Column('bilibili_uid', BigInteger(), table=<gv_blacklist>), Column('qq_uid', BigInteger(), table=<gv_blacklist>), Column('created_at', DateTime(), table=<gv_blacklist>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10a0aaa80; now>, for_update=False)), Column('updated_at', DateTime(), table=<gv_blacklist>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x10a0aac90; now>), server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10a0aac00; now>, for_update=False)), schema='gv')),
 ('add_index',
  Index('idx_blacklist_bilibili_uid', Column('bilibili_uid', BigInteger(), table=<gv_blacklist>))),
 ('add_index',
  Index('idx_blacklist_qq_uid', Column('qq_uid', BigInteger(), table=<gv_blacklist>))),
 ('add_table',
  Table('gv_user', MetaData(), Column('id', Uuid(), table=<gv_user>, primary_key=True, nullable=False, default=CallableColumnDefault(<function uuid4 at 0x10a0c6520>)), Column('bilibili_uid', BigInteger(), table=<gv_user>, nullable=False), Column('qq_uid', BigInteger(), table=<gv_user>, nullable=False), Column('created_at', DateTime(), table=<gv_user>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10a0aba40; now>, for_update=False)), Column('updated_at', DateTime(), table=<gv_user>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x10a0abbf0; now>), server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10a0abad0; now>, for_update=False)), schema='gv')),
 ('add_index',
  Index('idx_user_bilibili_uid', Column('bilibili_uid', BigInteger(), table=<gv_user>, nullable=False))),
 ('add_index',
  Index('idx_user_qq_uid', Column('qq_uid', BigInteger(), table=<gv_user>, nullable=False)))]

02-04 17:49:30 [ERROR] uvicorn | Application startup failed. Exiting.
(flashbot)  merlin@merlins-MacBook-Pro  ~/HajimiBot   dev ±  nb upgrade       
使用 Python: /Users/merlin/HajimiBot/.venv/bin/python
Usage: nb [OPTIONS] COMMAND [ARGS]...
Try 'nb -h' for help.

Error: No such command 'upgrade'.
(flashbot)  ✘ merlin@merlins-MacBook-Pro  ~/HajimiBot   dev ±  nb orm upgrade           
使用 Python: /Users/merlin/HajimiBot/.venv/bin/python
02-04 17:49:43 [SUCCESS] nonebot | NoneBot is initializing...
02-04 17:49:43 [INFO] nonebot | Current Env: prod
02-04 17:49:44 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_localstore"
02-04 17:49:44 [SUCCESS] nonebot | Succeeded to load plugin "group_verification" from "src.plugins.group_verification"
02-04 17:49:44 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_orm"
02-04 17:49:44 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_apscheduler"
(flashbot)  merlin@merlins-MacBook-Pro  ~/HajimiBot   dev ±  nb orm check  
使用 Python: /Users/merlin/HajimiBot/.venv/bin/python
02-04 17:49:50 [SUCCESS] nonebot | NoneBot is initializing...
02-04 17:49:50 [INFO] nonebot | Current Env: prod
02-04 17:49:51 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_localstore"
02-04 17:49:51 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_orm"
02-04 17:49:51 [SUCCESS] nonebot | Succeeded to load plugin "nonebot_plugin_apscheduler"
02-04 17:49:51 [SUCCESS] nonebot | Succeeded to load plugin "group_verification" from "src.plugins.group_verification"
Error: 检测到新的升级操作:
[('add_table',
  Table('gv_blacklist', MetaData(), Column('id', Uuid(), table=<gv_blacklist>, primary_key=True, nullable=False, default=CallableColumnDefault(<function uuid4 at 0x10a2f1f80>)), Column('bilibili_uid', BigInteger(), table=<gv_blacklist>), Column('qq_uid', BigInteger(), table=<gv_blacklist>), Column('created_at', DateTime(), table=<gv_blacklist>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10a2cb3e0; now>, for_update=False)), Column('updated_at', DateTime(), table=<gv_blacklist>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x10a2cb5f0; now>), server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10a2cb560; now>, for_update=False)), schema='gv')),
 ('add_index',
  Index('idx_blacklist_bilibili_uid', Column('bilibili_uid', BigInteger(), table=<gv_blacklist>))),
 ('add_index',
  Index('idx_blacklist_qq_uid', Column('qq_uid', BigInteger(), table=<gv_blacklist>))),
 ('add_table',
  Table('gv_user', MetaData(), Column('id', Uuid(), table=<gv_user>, primary_key=True, nullable=False, default=CallableColumnDefault(<function uuid4 at 0x10a2f2660>)), Column('bilibili_uid', BigInteger(), table=<gv_user>, nullable=False), Column('qq_uid', BigInteger(), table=<gv_user>, nullable=False), Column('created_at', DateTime(), table=<gv_user>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10ab5c350; now>, for_update=False)), Column('updated_at', DateTime(), table=<gv_user>, nullable=False, onupdate=ColumnElementColumnDefault(<sqlalchemy.sql.functions.now at 0x10ab5c500; now>), server_default=DefaultClause(<sqlalchemy.sql.functions.now at 0x10ab5c4a0; now>, for_update=False)), schema='gv')),
 ('add_index',
  Index('idx_user_bilibili_uid', Column('bilibili_uid', BigInteger(), table=<gv_user>, nullable=False))),
 ('add_index',
  Index('idx_user_qq_uid', Column('qq_uid', BigInteger(), table=<gv_user>, nullable=False)))]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions