Closed rabbit-dayi closed 2 years ago
See #40 #47
尝试将已建立的数据库 charset
更改为 utf8mb4
,并将数据库链接改为 mysql+aiomysql://sagiri_bot:zJ24kihjX@10.x.x.2:3306/sagiri_bot?charset=utf8mb4
感谢回复。 经过测试,可以在
utf8mb4
字符集下,排序规则为utf8mb4_unicode_ci
,使用mysql+aiomysql://sagiri_bot:zJ24kihjX@10.x.x.2:3306/sagiri_bot?charset=utf8mb4
,修改排序规则后,将整个数据表删除之后,可以正常使用。
同时另外一个小问题:
发生频率:仅在首次运行且mysql中没有tables时出现。
问题猜测:
sagiri_bot_1.keyword_reply
表格没有经过is_exist判断
关键日志:
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
│ │ └ "Table 'sagiri_bot_1.keyword_reply' doesn't exist"
│ └ 1146
└ <class 'pymysql.err.ProgrammingError'>
sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'sagiri_bot_1.keyword_reply' doesn't exist")
[SQL: SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.group
FROM keyword_reply
WHERE keyword_reply.reply_type IN (%s, %s)]
[parameters: ('regex', 'fuzzy')]
(Background on this error at: https://sqlalche.me/e/14/f405)
- 全部日志 :
```sh
File "/root/sagiri/sagiri-bot/sagiri_bot/orm/async_orm.py", line 51, in execute
result = await session.execute(sql, **kwargs)
│ │ │ └ {}
│ │ └ <sqlalchemy.sql.selectable.Select object at 0x7f1dd5d9c280>
│ └ <function AsyncSession.execute at 0x7f1e0f3a0790>
└ <sqlalchemy.ext.asyncio.session.AsyncSession object at 0x7f1dd5d7abe0>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/ext/asyncio/session.py", line 211, in execute
return await greenlet_spawn(
└ <function greenlet_spawn at 0x7f1e12225430>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 134, in greenlet_spawn
result = context.throw(*sys.exc_info())
│ │ │ └ <built-in function exc_info>
│ │ └ <module 'sys' (built-in)>
│ └ <method 'throw' of 'greenlet.greenlet' objects>
└ <_AsyncIoGreenlet object at 0x7f1dd5da1040 (otid=0x7f1e12c14e40) dead>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1692, in execute
result = conn._execute_20(statement, params or {}, execution_options)
│ │ │ │ └ immutabledict({'prebuffer_rows': True, '_result_disable_adapt_to_context': True, 'future_result': True})
│ │ │ └ None
│ │ └ <sqlalchemy.sql.selectable.Select object at 0x7f1dd5d9c280>
│ └ <function Connection._execute_20 at 0x7f1e0f972e50>
└ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1614, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
│ │ │ │ └ immutabledict({'prebuffer_rows': True, '_result_disable_adapt_to_context': True, 'future_result': True})
│ │ │ └ immutabledict({})
│ │ └ ({},)
│ └ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
└ <bound method ClauseElement._execute_on_connection of <sqlalchemy.sql.selectable.Select object at 0x7f1dd5d9c280>>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
│ └ <function Connection._execute_clauseelement at 0x7f1e0f972ca0>
└ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement
ret = self._execute_context(
│ └ <function Connection._execute_context at 0x7f1e0f972f70>
└ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context
self._handle_dbapi_exception(
│ └ <function Connection._handle_dbapi_exception at 0x7f1e0f977160>
└ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2026, in _handle_dbapi_exception
util.raise_(
│ └ <function raise_ at 0x7f1e1225c790>
└ <module 'sqlalchemy.util' from '/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/__init__.py'>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context
self.dialect.do_execute(
│ │ └ <function DefaultDialect.do_execute at 0x7f1e0f6b2040>
│ └ <sqlalchemy.dialects.mysql.aiomysql.MySQLDialect_aiomysql object at 0x7f1e0f2d0be0>
└ <sqlalchemy.future.engine.Connection object at 0x7f1dd5d9c610>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 732, in do_execute
cursor.execute(statement, parameters)
│ │ │ └ ('regex', 'fuzzy')
│ │ └ 'SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
│ └ <function AsyncAdapt_aiomysql_cursor.execute at 0x7f1e0f2c9c10>
└ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 97, in execute
return self.await_(self._execute_async(operation, parameters))
│ │ │ │ │ └ ('regex', 'fuzzy')
│ │ │ │ └ 'SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
│ │ │ └ <function AsyncAdapt_aiomysql_cursor._execute_async at 0x7f1e0f2c9d30>
│ │ └ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
│ └ <member 'await_' of 'AsyncAdapt_aiomysql_cursor' objects>
└ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 76, in await_only
return current.driver.switch(awaitable)
│ └ <coroutine object AsyncAdapt_aiomysql_cursor._execute_async at 0x7f1e07b4bc40>
└ <_AsyncIoGreenlet object at 0x7f1dd5da1040 (otid=0x7f1e12c14e40) dead>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 129, in greenlet_spawn
value = await result
└ <coroutine object AsyncAdapt_aiomysql_cursor._execute_async at 0x7f1e07b4bc40>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/sqlalchemy/dialects/mysql/aiomysql.py", line 109, in _execute_async
result = await self._cursor.execute(operation, parameters)
│ │ │ └ ('regex', 'fuzzy')
│ │ └ 'SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
│ └ <member '_cursor' of 'AsyncAdapt_aiomysql_cursor' objects>
└ <sqlalchemy.dialects.mysql.aiomysql.AsyncAdapt_aiomysql_cursor object at 0x7f1e0f1cd770>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 239, in execute
await self._query(query)
│ │ └ "SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
│ └ <function Cursor._query at 0x7f1e0f241940>
└ <aiomysql.cursors.Cursor object at 0x7f1dd5d7a970>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/cursors.py", line 457, in _query
await conn.query(q)
│ │ └ "SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group` \nFROM keyword_reply ...
│ └ <function Connection.query at 0x7f1e0f249790>
└ <aiomysql.connection.Connection object at 0x7f1dd5d9c8b0>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 469, in query
await self._read_query_result(unbuffered=unbuffered)
│ │ └ False
│ └ <function Connection._read_query_result at 0x7f1e0f249ee0>
└ <aiomysql.connection.Connection object at 0x7f1dd5d9c8b0>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 672, in _read_query_result
await result.read()
│ └ <function MySQLResult.read at 0x7f1e0f24aaf0>
└ <aiomysql.connection.MySQLResult object at 0x7f1dd5d9c220>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 1153, in read
first_packet = await self.connection._read_packet()
│ └ None
└ <aiomysql.connection.MySQLResult object at 0x7f1dd5d9c220>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/aiomysql/connection.py", line 641, in _read_packet
packet.raise_for_error()
│ └ <function MysqlPacket.raise_for_error at 0x7f1e0f2b1040>
└ <pymysql.protocol.MysqlPacket object at 0x7f1dd5d45a90>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/protocol.py", line 221, in raise_for_error
err.raise_mysql_exception(self._data)
│ │ │ └ <member '_data' of 'MysqlPacket' objects>
│ │ └ <pymysql.protocol.MysqlPacket object at 0x7f1dd5d45a90>
│ └ <function raise_mysql_exception at 0x7f1e0f2dc9d0>
└ <module 'pymysql.err' from '/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/err.py'>
File "/root/miniconda3/envs/sagiri-bot/lib/python3.8/site-packages/pymysql/err.py", line 143, in raise_mysql_exception
raise errorclass(errno, errval)
│ │ └ "Table 'sagiri_bot_1.keyword_reply' doesn't exist"
│ └ 1146
└ <class 'pymysql.err.ProgrammingError'>
sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1146, "Table 'sagiri_bot_1.keyword_reply' doesn't exist")
[SQL: SELECT keyword_reply.keyword, keyword_reply.reply_md5, keyword_reply.reply_type, keyword_reply.`group`
FROM keyword_reply
WHERE keyword_reply.reply_type IN (%s, %s)]
[parameters: ('regex', 'fuzzy')]
(Background on this error at: https://sqlalche.me/e/14/f405)
INFO [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
推测是因为 Saya
加载了 KeywordRespondent
插件时数据库仍未完成初始化,完成数据库初始化后重启即可
可见,以上两处监听的为同一事件 ApplicationLaunched
,且为同时执行,故会在首次使用时造成本次错误
感谢回复
问题 群名存在emoji时,出现数据库不能载入
如何复现 群名存在emoji
预期行为 也许可以对群名进行二次编码?
使用环境:
系统: linux,ubuntu 2004 (docker)
MAH 版本: mirai-api-http-v2.5.2
Ariadne 版本: Ariadne version: 0.6.10
Python 版本:3.8
源码版本: 0225ff29f5516f5ca2e969dfd21a40d321372da0
其他 Graia 库版本:
其他 有关 库版本: db_link - mysql+aiomysql://sagiri_bot:zJ24kihjX@10.x.x.2:3306/sagiri_bot
关键错误日志
日志/截图 将任何有关的日志/截图放到这里(控制台输出/MAH 输出/...)