Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment interroger plusieurs bases de données similaires à l'aide de Peewee ?

La prochaine n'est peut-être pas une réponse exacte à votre problème, mais ce que j'ai essayé moi-même - avec succès - utilise un playhouse.Proxy instance pour chaque schéma que je veux utiliser, et faire référence à un proxy correspondant dans la classe interne Meta. Je suppose que cela fonctionnera aussi sans proxy. Cependant, il semble que vous recherchiez des requêtes inter-schémas et que vous ayez déjà compris ce que j'ai trouvé tout à l'heure.

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

Eh bien, cela est possible avec le code généré à la main à partir de pwiz.py. Je suis sûr qu'il y a un plus élégant et paresseux (c'est-à-dire pas impatient ) façon de le faire aussi, en utilisant une sorte d'usine, mais je n'ai pas encore passé beaucoup de temps sur Python ni PeeWee. Si c'est le cas, pwiz.py devrait également avoir un indicateur supplémentaire à cette fin, je suppose.