Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用nonebot_plugin_datastore重构 #32

Merged
merged 10 commits into from
Apr 29, 2023
Merged

Conversation

LambdaYH
Copy link
Collaborator

@LambdaYH LambdaYH commented Mar 10, 2023

  1. 使用nonebot-plugin-datastore重构,能自动迁移旧json数据(迁移部分的代码没有很完善得测试过
  2. 提供nonebot_plugin_bottle_local_storage配置项,可将图片缓存到data/bottle/cache目录。

改动有亿点多(
如果作者不想吃可以直接关了我自己偷偷用

@Sevenyine
Copy link
Contributor

好耶,图片缓存!支持一下!!

@longchengguxiao
Copy link

创建数据库失败。载入可以正常,但是好像没办法创建数据库,报错不存在table。是不是需要写数据库链接什么的

@LambdaYH
Copy link
Collaborator Author

LambdaYH commented Apr 6, 2023

创建数据库失败。载入可以正常,但是好像没办法创建数据库,报错不存在table。是不是需要写数据库链接什么的

nonebot-plugin-datastore在没配置数据库时候会默认创建一个sqlite

猜测是你插件的文件夹名不是nonebot_plugin_bottle,需要把仓库内的nonebot_plugin_bottle放进去才行

@longchengguxiao
Copy link

创建数据库失败。载入可以正常,但是好像没办法创建数据库,报错不存在table。是不是需要写数据库链接什么的

nonebot-plugin-datastore在没配置数据库时候会默认创建一个sqlite

猜测是你插件的文件夹名不是nonebot_plugin_bottle,需要把仓库内的nonebot_plugin_bottle放进去才行

我是直接下载的zip不是clone也不是pip安装,你是说在这个nonebot_plugin_bottle外面还需要一个nonebot_plugin_bottle吗

@LambdaYH

This comment was marked as resolved.

@longchengguxiao
Copy link

longchengguxiao commented Apr 6, 2023

创建数据库失败。载入可以正常,但是好像没办法创建数据库,报错不存在table。是不是需要写数据库链接什么的

nonebot-plugin-datastore在没配置数据库时候会默认创建一个sqlite
猜测是你插件的文件夹名不是nonebot_plugin_bottle,需要把仓库内的nonebot_plugin_bottle放进去才行

我是直接下载的zip不是clone也不是pip安装,你是说在这个nonebot_plugin_bottle外面还需要一个nonebot_plugin_bottle吗

我刚刚去重新装了个NoneBot2确实发现了迁移时候的一个问题,不过和你这个不是同一个,下图是我使用插件时候的路径。
image

nonebot_plugin_bottle这个文件夹如果直接下载下来可能是叫nonebot_plugin_bottle-main,然后需要把箭头指向的文件夹放进插件路径

image

我也是这样做的,但是却不行。我在用另一个插件(中国象棋)也出现了同样的问题。是.env需要配置一些什么嘛。等下午我把详细报错截图看看

@LambdaYH

This comment was marked as resolved.

@longchengguxiao
Copy link

longchengguxiao commented Apr 6, 2023

创建数据库失败。载入可以正常,但是好像没办法创建数据库,报错不存在table。是不是需要写数据库链接什么的

nonebot-plugin-datastore在没配置数据库时候会默认创建一个sqlite
猜测是你插件的文件夹名不是nonebot_plugin_bottle,需要把仓库内的nonebot_plugin_bottle放进去才行

我是直接下载的zip不是clone也不是pip安装,你是说在这个nonebot_plugin_bottle外面还需要一个nonebot_plugin_bottle吗

我刚刚去重新装了个NoneBot2确实发现了迁移时候的一个问题,不过和你这个不是同一个,下图是我使用插件时候的路径。
image
nonebot_plugin_bottle这个文件夹如果直接下载下来可能是叫nonebot_plugin_bottle-main,然后需要把箭头指向的文件夹放进插件路径
image

我也是这样做的,但是却不行。我在用另一个插件(中国象棋)也出现了同样的问题。是.env需要配置一些什么嘛。等下午我把详细报错截图看看

不用配置什么啊,我刚刚直接用新创的NB2项目加了下插件就跑起来了,刚刚加了下中国象棋也正常
image
image

然后这俩的表名是这样的
image

或许是因为这个问题he0119/nonebot-plugin-datastore@d90cd0c

Remotepc-image-20230406140207_edit_139076358900484.png

在启动的时候我好像并没有弹出数据库启动成功的log。我的目录结构是这样的:

  • Yaobot
    • Yaobot
      • plugins
        • nonebot_plugin_bottle
    • bot.py
      -.env

报错是这样的:
Remotepc-image-20230406141137.png

应该就是在说创建表格失败的事。因为我之前没有用过数据库,不过我也不知道该怎么开启。我也百度了错误内容,但是搜索出来结果都不太相关,没办法解决。

不过我用的确实是nonebot2.0.0rc4

@LambdaYH

This comment was marked as resolved.

@longchengguxiao
Copy link

创建数据库失败。载入可以正常,但是好像没办法创建数据库,报错不存在table。是不是需要写数据库链接什么的

nonebot-plugin-datastore在没配置数据库时候会默认创建一个sqlite
猜测是你插件的文件夹名不是nonebot_plugin_bottle,需要把仓库内的nonebot_plugin_bottle放进去才行

我是直接下载的zip不是clone也不是pip安装,你是说在这个nonebot_plugin_bottle外面还需要一个nonebot_plugin_bottle吗

我刚刚去重新装了个NoneBot2确实发现了迁移时候的一个问题,不过和你这个不是同一个,下图是我使用插件时候的路径。
image
nonebot_plugin_bottle这个文件夹如果直接下载下来可能是叫nonebot_plugin_bottle-main,然后需要把箭头指向的文件夹放进插件路径
image

我也是这样做的,但是却不行。我在用另一个插件(中国象棋)也出现了同样的问题。是.env需要配置一些什么嘛。等下午我把详细报错截图看看

不用配置什么啊,我刚刚直接用新创的NB2项目加了下插件就跑起来了,刚刚加了下中国象棋也正常
image
image
然后这俩的表名是这样的
image
或许是因为这个问题he0119/nonebot-plugin-datastore@d90cd0c

Remotepc-image-20230406140207_edit_139076358900484.png

在启动的时候我好像并没有弹出数据库启动成功的log。我的目录结构是这样的:

  • Yaobot

    • Yaobot

      • plugins

        • nonebot_plugin_bottle
    • bot.py
      -.env

报错是这样的: Remotepc-image-20230406141137.png

应该就是在说创建表格失败的事。因为我之前没有用过数据库,不过我也不知道该怎么开启。我也百度了错误内容,但是搜索出来结果都不太相关,没办法解决。

不过我用的确实是nonebot2.0.0rc4

datastore的版本有最新吗

问题解决了,原来是之前更新的时候没有更新fastapi,以后再也不用pip了,改用poetry

@LambdaYH

This comment was marked as resolved.

@Todysheep
Copy link
Owner

作者坐穿牢底归来了(
非常感谢PR(磕磕磕)因为快高三了没多少时间搞这个所以一堆issue没处理(磕磕磕)

@Todysheep Todysheep merged commit 0588c64 into Todysheep:main Apr 29, 2023
@Sevenyine
Copy link
Contributor

问题解决了,原来是之前更新的时候没有更新fastapi,以后再也不用pip了,改用poetry

我更新了fastapi也没有解决这个问题……

@Sevenyine
Copy link
Contributor

居然还和fastapi有关系,这真是想不到的问题(,难道是之前nb更新时候把默认的fastapi去掉的原因

是不是这个插件不会自动创建nonebot_plugin_bottle这个table啊(?)
环境是poetry且都为最新版本
启动报错:

04-29 18:39:09 [ERROR] nonebot_plugin_datastore | 数据库初始化后执行的函数出错: (sqlite3.OperationalError) no such table: nonebot_plugin_bottle_bottle
[SQL: SELECT max(nonebot_plugin_bottle_bottle.id) AS max_1 
FROM nonebot_plugin_bottle_bottle]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

执行命令报错:

04-29 18:34:43 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_bottle) failed.
Traceback (most recent call last):
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1963, in _exec_single_context
    self.dialect.do_execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 920, in do_execute
    cursor.execute(statement, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 113, in execute
    self._adapt_connection._handle_exception(error)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 254, in _handle_exception
    raise error
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 95, in execute
    self.await_(_cursor.execute(operation, parameters))
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 102, in await_only
    return current.driver.switch(awaitable)  # type: ignore[no-any-return]
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 160, in greenlet_spawn
    value = await result
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 37, in execute
    await self._execute(self._cursor.execute, sql, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 31, in _execute
    return await self._conn._execute(fn, *args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 129, in _execute
    return await future
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 102, in run
    result = function()
sqlite3.OperationalError: no such table: nonebot_plugin_bottle_bottle

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/bin/nb", line 8, in <module>
    sys.exit(main())
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nb_cli/commands/main.py", line 30, in run
    run_bot(file, app)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nb_cli/handlers/deploy.py", line 25, in run_bot
    nonebot.run(app=f"{module_name}:{app}")
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/__init__.py", line 309, in run
    get_driver().run(*args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/drivers/fastapi.py", line 198, in run
    uvicorn.run(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/uvicorn/main.py", line 578, in run
    server.run()
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/uvicorn/server.py", line 61, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/message.py", line 141, in _check_matcher
    await _run_matcher(Matcher, bot, event, state, stack, dependency_cache)
> File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/message.py", line 187, in _run_matcher
    await matcher.run(bot, event, state, stack, dependency_cache)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/internal/matcher/matcher.py", line 753, in run
    await self.simple_run(bot, event, state, stack, dependency_cache)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/internal/matcher/matcher.py", line 728, in simple_run
    await handler(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/dependencies/__init__.py", line 108, in __call__
    return await cast(Callable[..., Awaitable[R]], self.call)(**values)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot_plugin_bottle/__init__.py", line 141, in _
    add_index = await bottle_manager.add_bottle(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot_plugin_bottle/data_source.py", line 169, in add_bottle
    bottles = await session.scalars(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/session.py", line 456, in scalars
    result = await self.execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/session.py", line 338, in execute
    result = await greenlet_spawn(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 165, in greenlet_spawn
    result = context.throw(*sys.exc_info())
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2231, in execute
    return self._execute_internal(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2126, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 292, in orm_execute_statement
    result = conn.execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1413, in execute
    return meth(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 483, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1637, in _execute_clauseelement
    ret = self._execute_context(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1841, in _execute_context
    return self._exec_single_context(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1982, in _exec_single_context
    self._handle_dbapi_exception(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2339, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1963, in _exec_single_context
    self.dialect.do_execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 920, in do_execute
    cursor.execute(statement, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 113, in execute
    self._adapt_connection._handle_exception(error)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 254, in _handle_exception
    raise error
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 95, in execute
    self.await_(_cursor.execute(operation, parameters))
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 102, in await_only
    return current.driver.switch(awaitable)  # type: ignore[no-any-return]
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 160, in greenlet_spawn
    value = await result
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 37, in execute
    await self._execute(self._cursor.execute, sql, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 31, in _execute
    return await self._conn._execute(fn, *args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 129, in _execute
    return await future
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 102, in run
    result = function()
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: nonebot_plugin_bottle_bottle
[SQL: SELECT nonebot_plugin_bottle_bottle.id, nonebot_plugin_bottle_bottle.user_id, nonebot_plugin_bottle_bottle.group_id, nonebot_plugin_bottle_bottle.user_name, nonebot_plugin_bottle_bottle.group_name, nonebot_plugin_bottle_bottle.content, nonebot_plugin_bottle_bottle.report, nonebot_plugin_bottle_bottle.picked, nonebot_plugin_bottle_bottle.is_del, nonebot_plugin_bottle_bottle.time 
FROM nonebot_plugin_bottle_bottle 
WHERE nonebot_plugin_bottle_bottle.user_id = ? AND nonebot_plugin_bottle_bottle.group_id = ?]
[parameters: (我的QQ号, 群号)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

@Todysheep
Copy link
Owner

我已经为 @LambdaYH 邀请协作者了,尽管PR,我看懂什么的等一年后的大学再说(倒

@Sevenyine

This comment was marked as off-topic.

@LambdaYH
Copy link
Collaborator Author

居然还和fastapi有关系,这真是想不到的问题(,难道是之前nb更新时候把默认的fastapi去掉的原因

是不是这个插件不会自动创建nonebot_plugin_bottle这个table啊(?) 环境是poetry且都为最新版本 启动报错:

04-29 18:39:09 [ERROR] nonebot_plugin_datastore | 数据库初始化后执行的函数出错: (sqlite3.OperationalError) no such table: nonebot_plugin_bottle_bottle
[SQL: SELECT max(nonebot_plugin_bottle_bottle.id) AS max_1 
FROM nonebot_plugin_bottle_bottle]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

执行命令报错:

04-29 18:34:43 [ERROR] nonebot | Running Matcher(type='message', module=nonebot_plugin_bottle) failed.
Traceback (most recent call last):
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1963, in _exec_single_context
    self.dialect.do_execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 920, in do_execute
    cursor.execute(statement, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 113, in execute
    self._adapt_connection._handle_exception(error)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 254, in _handle_exception
    raise error
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 95, in execute
    self.await_(_cursor.execute(operation, parameters))
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 102, in await_only
    return current.driver.switch(awaitable)  # type: ignore[no-any-return]
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 160, in greenlet_spawn
    value = await result
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 37, in execute
    await self._execute(self._cursor.execute, sql, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 31, in _execute
    return await self._conn._execute(fn, *args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 129, in _execute
    return await future
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 102, in run
    result = function()
sqlite3.OperationalError: no such table: nonebot_plugin_bottle_bottle

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/bin/nb", line 8, in <module>
    sys.exit(main())
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nb_cli/commands/main.py", line 30, in run
    run_bot(file, app)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nb_cli/handlers/deploy.py", line 25, in run_bot
    nonebot.run(app=f"{module_name}:{app}")
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/__init__.py", line 309, in run
    get_driver().run(*args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/drivers/fastapi.py", line 198, in run
    uvicorn.run(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/uvicorn/main.py", line 578, in run
    server.run()
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/uvicorn/server.py", line 61, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "/usr/local/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/message.py", line 141, in _check_matcher
    await _run_matcher(Matcher, bot, event, state, stack, dependency_cache)
> File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/message.py", line 187, in _run_matcher
    await matcher.run(bot, event, state, stack, dependency_cache)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/internal/matcher/matcher.py", line 753, in run
    await self.simple_run(bot, event, state, stack, dependency_cache)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/internal/matcher/matcher.py", line 728, in simple_run
    await handler(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot/dependencies/__init__.py", line 108, in __call__
    return await cast(Callable[..., Awaitable[R]], self.call)(**values)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot_plugin_bottle/__init__.py", line 141, in _
    add_index = await bottle_manager.add_bottle(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/nonebot_plugin_bottle/data_source.py", line 169, in add_bottle
    bottles = await session.scalars(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/session.py", line 456, in scalars
    result = await self.execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/ext/asyncio/session.py", line 338, in execute
    result = await greenlet_spawn(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 165, in greenlet_spawn
    result = context.throw(*sys.exc_info())
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2231, in execute
    return self._execute_internal(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2126, in _execute_internal
    result: Result[Any] = compile_state_cls.orm_execute_statement(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 292, in orm_execute_statement
    result = conn.execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1413, in execute
    return meth(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 483, in _execute_on_connection
    return connection._execute_clauseelement(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1637, in _execute_clauseelement
    ret = self._execute_context(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1841, in _execute_context
    return self._exec_single_context(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1982, in _exec_single_context
    self._handle_dbapi_exception(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2339, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1963, in _exec_single_context
    self.dialect.do_execute(
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 920, in do_execute
    cursor.execute(statement, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 113, in execute
    self._adapt_connection._handle_exception(error)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 254, in _handle_exception
    raise error
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py", line 95, in execute
    self.await_(_cursor.execute(operation, parameters))
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 102, in await_only
    return current.driver.switch(awaitable)  # type: ignore[no-any-return]
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 160, in greenlet_spawn
    value = await result
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 37, in execute
    await self._execute(self._cursor.execute, sql, parameters)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/cursor.py", line 31, in _execute
    return await self._conn._execute(fn, *args, **kwargs)
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 129, in _execute
    return await future
  File "/root/.cache/pypoetry/virtualenvs/gzbot2-_9hSRCdM-py3.10/lib/python3.10/site-packages/aiosqlite/core.py", line 102, in run
    result = function()
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: nonebot_plugin_bottle_bottle
[SQL: SELECT nonebot_plugin_bottle_bottle.id, nonebot_plugin_bottle_bottle.user_id, nonebot_plugin_bottle_bottle.group_id, nonebot_plugin_bottle_bottle.user_name, nonebot_plugin_bottle_bottle.group_name, nonebot_plugin_bottle_bottle.content, nonebot_plugin_bottle_bottle.report, nonebot_plugin_bottle_bottle.picked, nonebot_plugin_bottle_bottle.is_del, nonebot_plugin_bottle_bottle.time 
FROM nonebot_plugin_bottle_bottle 
WHERE nonebot_plugin_bottle_bottle.user_id = ? AND nonebot_plugin_bottle_bottle.group_id = ?]
[parameters: (我的QQ号, 群号)]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

会自动创建的,这应该是迁移旧数据时候发生的错误。
旧数据里面[parameters: (我的QQ号, 群号)],旧的数据里面似乎有个汉字的qq号,可以检查下json文件(

@Sevenyine
Copy link
Contributor

Sevenyine commented Apr 29, 2023

会自动创建的,这应该是迁移旧数据时候发生的错误。
旧数据里面[parameters: (我的QQ号, 群号)],旧的数据里面似乎有个汉字的qq号,可以检查下json文件(

那个汉字是我为了隐私自己打码的(惊)原log是正常的数字号

@LambdaYH
Copy link
Collaborator Author

会自动创建的,这应该是迁移旧数据时候发生的错误。
旧数据里面[parameters: (我的QQ号, 群号)],旧的数据里面似乎有个汉字的qq号,可以检查下json文件(

那个汉字是我为了隐私自己打码的(惊)原log是正常的数字号

那应该就是表没自动创建

会自动创建的,这应该是迁移旧数据时候发生的错误。
旧数据里面[parameters: (我的QQ号, 群号)],旧的数据里面似乎有个汉字的qq号,可以检查下json文件(

那个汉字是我为了隐私自己打码的(惊)原log是正常的数字号

确实用pypi装的话不会创建表,但是直接丢文件夹就可以,我去看看怎么修

@LambdaYH
Copy link
Collaborator Author

会自动创建的,这应该是迁移旧数据时候发生的错误。
旧数据里面[parameters: (我的QQ号, 群号)],旧的数据里面似乎有个汉字的qq号,可以检查下json文件(

那个汉字是我为了隐私自己打码的(惊)原log是正常的数字号

image
因为打包上传pypi时候没把migrations文件夹带进去

@Todysheep
Copy link
Owner

第一次打包带文件夹的项目,不太会,现在没问题了(

@Sevenyine
Copy link
Contributor

好像还是有点其他问题(悲)#37

@Sevenyine
Copy link
Contributor

嘶,这次是没什么有用信息的报错,,我把这条报错的信息之后的data.db下下来发现数据库table里还是啥也没有,看来还是没迁移成功……
我确保迁移之前的数据库是没有bottle相关的table的,并且data.json也没问题
image

@LambdaYH
Copy link
Collaborator Author

LambdaYH commented Apr 30, 2023

嘶,这次是没什么有用信息的报错,,我把这条报错的信息之后的data.db下下来发现数据库table里还是啥也没有,看来还是没迁移成功……
我确保迁移之前的数据库是没有bottle相关的table的,并且data.json也没问题
image

感觉是旧格式的评论我没处理好

旧格式的评论是 用户:评论 这种格式的吗

因为没有用过旧的所以这里我是直接参照原代码改的,如果可以的话希望提供一个旧格式的样例我一次性去测了,(

@LambdaYH
Copy link
Collaborator Author

嘶,这次是没什么有用信息的报错,,我把这条报错的信息之后的data.db下下来发现数据库table里还是啥也没有,看来还是没迁移成功…… 我确保迁移之前的数据库是没有bottle相关的table的,并且data.json也没问题 image

理论上修好了,这次绝对不会再出问题了(这就是迁移脚本赶工的后果吗)

@Sevenyine

This comment was marked as off-topic.

@LambdaYH
Copy link
Collaborator Author

LambdaYH commented Apr 30, 2023

在捡漂流瓶的时候又有sqlite3.OperationalError: database is locked的问题了……😭 不过这个可能是我自己的配置问题?我尝试在datastore插件里找到了解决方法:在.env文件中配置 database_engine_options={"poolclass": StaticPool}database_engine_options={"poolclass": "StaticPool"}两种方法 但是不清楚有没有效果,,这样设置了之后还是会出现报错。https://pastebin.com/uVNZJFJp (里面是在懒得打码了,两周自动过期) 似乎是在chatrecorder写入的时候出现了问题。 但是扔漂流瓶、漂流瓶详情等命令中,均无报错,并且正常发消息也没有报错,只有捡瓶子会有问题 如果不是bottle问题我去别的地方问(╥﹏╥)

之前那个迁移问题可以把comment里面的中文改成英文:临时解决

你这个图片
image
看不到

不过sqlite3.OperationalError: database is locked应该是orm的问题,我是用的postgresql没有遇到过

另外你的配置是不是写错了
image

这里是配置
datastore_engine_options,但是你是database_engine_options

@Sevenyine
Copy link
Contributor

Sevenyine commented Apr 30, 2023

嘶,这次是没什么有用信息的报错,,我把这条报错的信息之后的data.db下下来发现数据库table里还是啥也没有,看来还是没迁移成功……
我确保迁移之前的数据库是没有bottle相关的table的,并且data.json也没问题
image

感觉是旧格式的评论我没处理好

旧格式的评论是 用户:评论 这种格式的吗

因为没有用过旧的所以这里我是直接参照原代码改的,如果可以的话希望提供一个旧格式的样例我一次性去测了,(

哦哦,当时没看到这条。完整的带评论的json格式是

{
        "del": 0,
        "user": 用户qq,
        "group": 群qq,
        "user_name": "名字",
        "group_name": "群名",
        "text": "内容",
        "report": 1,
        "reported": [],
        "picked": 47,
        "comment": [
            [
                评论人qq,(这里本来就不带引号,是直接的数字,这个中文括号记得删)
                "评论人当时的昵称:评论内容"
            ],
            [
                同上,
                "同上:同上"
            ]
        ],
        "time": "1980-01-01 00:00:00"
},

@Sevenyine

This comment was marked as off-topic.

@LambdaYH
Copy link
Collaborator Author

LambdaYH commented Apr 30, 2023

因为我测试时候是手动随便打的评论,把冒号打成了英文的,所以...后面就当英文冒号在处理,但实际上是中文冒号(

所以可以暂时把"评论人当时的昵称:评论内容"改成"评论人当时的昵称:评论内容"完成迁移,里面冒号有区别

@Sevenyine
Copy link
Contributor

因为我测试时候是手动随便打的评论,把冒号打成了英文的,所以...后面就当英文冒号在处理,但实际上是中文冒号(

所以可以暂时把"评论人当时的昵称:评论内容"改成"评论人当时的昵称:评论内容"完成迁移,里面冒号有区别

哦哦,不过我看好像是能正常迁移评论的,我这里捡到过有评论的瓶子是正常的

@LambdaYH
Copy link
Collaborator Author

因为我测试时候是手动随便打的评论,把冒号打成了英文的,所以...后面就当英文冒号在处理,但实际上是中文冒号(
所以可以暂时把"评论人当时的昵称:评论内容"改成"评论人当时的昵称:评论内容"完成迁移,里面冒号有区别

哦哦,不过我看好像是能正常迁移评论的,我这里捡到过有评论的瓶子是正常的

啊?你之前不是有说迁移后表里面还是空白的吗

@Sevenyine
Copy link
Contributor

因为我测试时候是手动随便打的评论,把冒号打成了英文的,所以...后面就当英文冒号在处理,但实际上是中文冒号(
所以可以暂时把"评论人当时的昵称:评论内容"改成"评论人当时的昵称:评论内容"完成迁移,里面冒号有区别

哦哦,不过我看好像是能正常迁移评论的,我这里捡到过有评论的瓶子是正常的

啊?你之前不是有说迁移后表里面还是空白的吗

我是更新了当时那个pr的版本(下的zip替换的)然后解决了

@Sevenyine
Copy link
Contributor

Sevenyine commented Apr 30, 2023

不过sqlite3.OperationalError: database is locked应该是orm的问题,我是用的postgresql没有遇到过

另外你的配置是不是写错了 image

这里是配置 datastore_engine_options,但是你是database_engine_options

这个是我自己的问题!我折叠了,感谢!终于能用了(呜呜呜)

@LambdaYH

This comment was marked as off-topic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants