Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como consultar vários bancos de dados semelhantes usando o Peewee?


Em seguida, talvez não seja uma resposta exata para o seu problema, mas o que eu tentei - com sucesso - é usar um playhouse.Proxy instância para cada esquema que quero usar e referir-me a um proxy correspondente na classe interna Meta. Eu acho que isso funcionará sem proxies também. No entanto, parece que você está procurando consultas de esquema cruzado e já descobriu o que eu criei agora.
#!/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')

Bem, isso é possível com a criação de código gerado a partir de pwiz.py. Tenho certeza de que existe um estilo mais elegante e preguiçoso (ou seja, não está ansioso ) de fazer isso também, usando algum tipo de fábrica, mas ainda não gastei muito tempo no Python nem no PeeWee. Nesse caso, o pwiz.py também deve ter um sinalizador extra para esse propósito, eu acho.