Mysql
 sql >> Database >  >> RDS >> Mysql

Come eseguire query su diversi database simili utilizzando Peewee?

Il prossimo forse non è una risposta esatta al tuo problema, ma quello che ho provato io stesso - con successo - è usare un playhouse.Proxy istanza per ogni schema che voglio usare e fare riferimento a un proxy corrispondente nella innerclass Meta. Immagino che funzionerà anche senza proxy. Tuttavia, sembra che tu stia cercando query su schemi incrociati e hai già capito cosa mi è venuto in mente proprio ora.

#!/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')

Bene, questo è possibile con il codice generato manualmente da pwiz.py. Sono sicuro che esiste un ambiente più elegante e pigro (cioè non desideroso ) anche questo modo, usando una sorta di fabbrica, ma non ho ancora speso molto tempo su Python o PeeWee. Se è così, pwiz.py dovrebbe avere un flag in più anche per questo scopo, immagino.