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

2024-10-02 02:38:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

一。在

from modelsA import *
from modelsB import *

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

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

^{pr2}$

你怎么知道这个查询将在哪个数据库上执行?在

我有个主意,但对我来说似乎很肮脏: 我可以手动重命名模型a.py以及型号b.py要使它们区分开来,然后编写以下代码:

ca = CustomersA.get(CustomersA.customernumber == 12)
cb = CustomersB.get(CustomersB.customernumber == 12)

粗略地说,Peewee能处理这类案件吗?如果是,该怎么办?我们将非常感谢您的小片段^^ 谢谢。在


Tags: 代码frompy模型import数据库getmysql
2条回答

我觉得这样比较简单:

import modelsA as A
import modelsB as B

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

下一步也许不是你问题的确切答案,但我自己尝试的——成功地——就是使用剧场。代理实例,并引用innerclass Meta中相应的代理。我想如果没有代理也行。但是,似乎您正在寻找跨模式查询,并且已经了解了我刚才提出的问题。在

#!/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我想也应该有一个额外的标志。在

相关问题 更多 >

    热门问题