You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Peewee不使用Proxy能否在main.py中实现同一模型对接多个数据库?

可以不使用Proxy实现该需求,核心实现思路是运行时动态绑定模型类的数据库属性,配合封装即可实现你期望的sqlite_1.add_user(name="Jerry")调用形式,无需每次切换数据库时重复初始化模型。

实现代码

1. 调整database.py(移除Proxy依赖)

# database.py
import peewee as pw

# 基类先不绑定具体数据库,留待后续动态绑定
class BaseModel(pw.Model):
    class Meta:
        pass

class User(BaseModel):
    name = pw.CharField()

2. main.py完成多数据库初始化与封装

# main.py
import peewee as pw
from database import BaseModel, User

# 封装数据库实例与对应操作
class DBInstance:
    def __init__(self, db_file_path):
        # 初始化独立数据库连接
        self.db = pw.SqliteDatabase(db_file_path)
        # 绑定模型到当前数据库
        self._bind_models()
        # 初始化表结构
        self._init_tables()

    def _bind_models(self):
        # 批量绑定所有继承自BaseModel的模型类到当前数据库
        for model_cls in BaseModel.__subclasses__():
            model_cls.bind(self.db, bind_refs=False, bind_backrefs=False)

    def _init_tables(self):
        with self.db:
            self.db.create_tables([User], safe=True)

    # 封装业务操作方法
    def add_user(self, name):
        with self.db.atomic():
            return User.create(name=name).save()

    def get_user(self, name):
        with self.db.atomic():
            return User.get(User.name == name)

# 初始化多个完全独立的数据库实例
sqlite_1 = DBInstance('sqlite_1.db')
sqlite_2 = DBInstance('sqlite_2.db')

# 调用形式完全符合要求,两个数据库操作互不干扰
sqlite_1.add_user(name="Jerry")
sqlite_2.add_user(name="Jerry")

补充说明

如果不需要封装成实例调用的形式,也可以直接使用Peewee内置的bind_ctx上下文管理器临时绑定模型到指定数据库,实现多数据库切换:

# 极简无封装实现示例
import peewee as pw
from database import User

sqlite_1 = pw.SqliteDatabase('sqlite_1.db')
sqlite_2 = pw.SqliteDatabase('sqlite_2.db')

# 操作sqlite_1
with sqlite_1.bind_ctx([User]):
    sqlite_1.create_tables([User], safe=True)
    User.create(name="Tom")

# 操作sqlite_2
with sqlite_2.bind_ctx([User]):
    sqlite_2.create_tables([User], safe=True)
    User.create(name="Jerry")

注意:多线程场景下使用动态绑定方案需要加锁保证绑定操作的原子性,避免多线程同时修改模型绑定的数据库导致数据串库。

内容的提问来源于stack exchange,提问作者flice com

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:06:03