perf: minor fixes

This commit is contained in:
Junyan Qin
2025-09-13 17:59:10 +08:00
parent e2071d9486
commit 6a7e88ffd6
7 changed files with 38 additions and 26 deletions

View File

@@ -40,6 +40,7 @@ required_deps = {
'sqlmodel': 'sqlmodel',
'telegramify_markdown': 'telegramify-markdown',
'slack_sdk': 'slack_sdk',
'asyncpg': 'asyncpg',
}

View File

@@ -1,8 +1,6 @@
from __future__ import annotations
import pip
import sqlalchemy.ext.asyncio as sqlalchemy_asyncio
import sys
from .. import database
@@ -12,19 +10,12 @@ class PostgreSQLDatabaseManager(database.BaseDatabaseManager):
"""PostgreSQL database manager"""
async def initialize(self) -> None:
postgresql_config = self.ap.instance_config.data.get('database', {}).get('postgresql', {})
# default to PostgreSQL with asyncpg driver
try:
__import__("asyncpg")
except ImportError:
print('以下依赖包未安装,将自动安装,请完成后重启程序:')
print(
'The dependence package asyncpg is missing, it will be installed automatically, please restart the program after completion:'
)
pip.main(['install', "asyncpg"])
print('已自动安装缺失的依赖包 asyncpg ,请重启程序。')
print('The missing dependence asyncpg have been installed automatically, please restart the program.')
sys.exit(0)
engine_url = self.ap.instance_config.data['system'].get('database', {}).get('engine_url', 'postgresql+asyncpg://root:***@127.0.0.1:5432/postgres')
host = postgresql_config.get('host', '127.0.0.1')
port = postgresql_config.get('port', 5432)
user = postgresql_config.get('user', 'postgres')
password = postgresql_config.get('password', 'postgres')
database = postgresql_config.get('database', 'postgres')
engine_url = f'postgresql+asyncpg://{user}:{password}@{host}:{port}/{database}'
self.engine = sqlalchemy_asyncio.create_async_engine(engine_url)

View File

@@ -10,5 +10,6 @@ class SQLiteDatabaseManager(database.BaseDatabaseManager):
"""SQLite database manager"""
async def initialize(self) -> None:
engine_url = self.ap.instance_config.data['system'].get('database', {}).get('engine_url', 'sqlite+aiosqlite:///data/langbot.db')
db_file_path = self.ap.instance_config.data.get('database', {}).get('sqlite', {}).get('path', 'data/langbot.db')
engine_url = f'sqlite+aiosqlite:///{db_file_path}'
self.engine = sqlalchemy_asyncio.create_async_engine(engine_url)

View File

@@ -36,9 +36,8 @@ class PersistenceManager:
self.meta = base.Base.metadata
async def initialize(self):
self.ap.logger.info('Initializing database...')
database_type = self.ap.instance_config.data['system'].get('database', {}).get('type', 'sqlite')
database_type = self.ap.instance_config.data.get('database', {}).get('use', 'sqlite')
self.ap.logger.info(f'Initializing database type: {database_type}...')
for manager in database.preregistered_managers:
if manager.name == database_type:
self.db = manager(self.ap)

View File

@@ -9,9 +9,21 @@ class DBMigratePluginInstallSource(migration.DBMigration):
async def upgrade(self):
"""升级"""
# 查询表结构获取所有列名(异步执行 SQL
result = await self.ap.persistence_mgr.execute_async(sqlalchemy.text('PRAGMA table_info(plugin_settings);'))
# fetchall() 是同步方法,无需 await
columns = [row[1] for row in result.fetchall()]
columns = []
if self.ap.persistence_mgr.db.name == 'postgresql':
result = await self.ap.persistence_mgr.execute_async(
sqlalchemy.text(
"SELECT column_name FROM information_schema.columns WHERE table_name = 'plugin_settings';"
)
)
all_result = result.fetchall()
columns = [row[0] for row in all_result]
else:
result = await self.ap.persistence_mgr.execute_async(sqlalchemy.text('PRAGMA table_info(plugin_settings);'))
all_result = result.fetchall()
columns = [row[1] for row in all_result]
# 检查并添加 install_source 列
if 'install_source' not in columns:

View File

@@ -19,7 +19,7 @@ dependencies = [
"dashscope>=1.23.2",
"dingtalk-stream>=0.24.0",
"discord-py>=2.5.2",
"pynacl>=1.5.0", # Required for Discord voice support
"pynacl>=1.5.0", # Required for Discord voice support
"gewechat-client>=0.1.5",
"lark-oapi>=1.4.15",
"mcp>=1.8.1",
@@ -63,6 +63,7 @@ dependencies = [
"chromadb>=0.4.24",
"qdrant-client (>=1.15.1,<2.0.0)",
"langbot-plugin==0.1.1b6",
"asyncpg>=0.30.0",
]
keywords = [
"bot",

View File

@@ -21,8 +21,15 @@ system:
expire: 604800
secret: ''
database:
type: sqlite
engine_url: 'sqlite+aiosqlite:///data/langbot.db'
use: sqlite
sqlite:
path: 'data/langbot.db'
postgresql:
host: '127.0.0.1'
port: 5432
user: 'postgres'
password: 'postgres'
database: 'postgres'
vdb:
use: chroma
qdrant: