Python 如何使用Peewee查询几个类似的数据库?

Python 如何使用Peewee查询几个类似的数据库?,python,mysql,orm,peewee,Python,Mysql,Orm,Peewee,我遇到了一个使用Peewee查询多个数据库的问题: 我有两个现有的mysql数据库(让我们把它们命名为A和B)(结构相似,因为它是两个Bugzilla数据库) 我使用Pwiz生成模型(modelsA.py和modelsB.py) 我写这段代码: 问题是:由于modelsB中的类(有时)与modelsA相同,modelsB类“覆盖”modelsA类,因此无法查询A 此外,我不知道如何查询一个特定的数据库。 例如,使用此代码: c = Customers.get(Customers.custo

我遇到了一个使用Peewee查询多个数据库的问题:

  • 我有两个现有的mysql数据库(让我们把它们命名为A和B)(结构相似,因为它是两个Bugzilla数据库)
  • 我使用Pwiz生成模型(modelsA.py和modelsB.py)
  • 我写这段代码:

问题是:由于modelsB中的类(有时)与modelsA相同,modelsB类“覆盖”modelsA类,因此无法查询A

此外,我不知道如何查询一个特定的数据库。 例如,使用此代码:

c = Customers.get(Customers.customernumber == 12)
ca = CustomersA.get(CustomersA.customernumber == 12)
cb = CustomersB.get(CustomersB.customernumber == 12)
您如何知道将在哪个数据库上执行此查询

我有个主意,但对我来说似乎很肮脏: 我可以手动重命名modelsA.py和modelsB.py中的类,使它们不同,然后编写以下代码:

c = Customers.get(Customers.customernumber == 12)
ca = CustomersA.get(CustomersA.customernumber == 12)
cb = CustomersB.get(CustomersB.customernumber == 12)
大体上,皮维能处理这类案件吗?如果是,怎么办?如果您能提供一些片段,我们将不胜感激^^
谢谢。

下一步可能无法准确回答您的问题,但我自己尝试的——成功的——是为我想要使用的每个模式使用playhouse.Proxy实例,并在内部类元中引用相应的代理。我想这在没有代理的情况下也会起作用。然而,您似乎正在寻找跨模式查询,并且已经了解了我刚才提出的内容

#!/usr/bin/python

import sqlite3
import peewee
from peewee import *
from playhouse.proxy import *

database_a_proxy = Proxy()
database_b_proxy = Proxy()

class BaseModelA(Model):
    class Meta:
            database = database_a_proxy

class BaseModelB(Model):
    class Meta:
            database = database_b_proxy

class RelationInSchemaA(BaseModelA):
    textfield = CharField()

class RelationInSchemaB(BaseModelB):
    textfield = CharField()

database_a = SqliteDatabase('schemaA', **{})
database_b = SqliteDatabase('schemaB', **{})

database_a_proxy.initialize(database_a)
database_b_proxy.initialize(database_b)

try:
   RelationInSchemaA.create_table()
   RelationInSchemaB.create_table()
except:
   pass

RelationInSchemaA.create(textfield='Hello')  
RelationInSchemaB.create(textfield='PeeWee')

好的,这可以通过手工制作从pwiz.py生成的代码来实现。我确信有一种更优雅、更懒惰的方法,也就是说,使用某种工厂,但我还没有在Python和PeeWee上花太多时间。如果是这样,我想pwiz.py也应该有一个用于此目的的额外标志。

我认为这种方法更简单:

import modelsA as A
import modelsB as B

ca = A.Customers.get(A.Customers.customernumber == 12)
cb = B.Customers.get(B.Customers.customernumber == 12)