Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie frage ich mehrere ähnliche Datenbanken mit Peewee ab?

Next ist vielleicht keine genaue Antwort auf Ihr Problem, aber was ich selbst versucht habe - erfolgreich - ist die Verwendung eines playhouse.Proxy Instanz für jedes Schema, das ich verwenden möchte, und verweise auf einen entsprechenden Proxy in der innerclass Meta. Ich denke, das wird auch ohne Proxys funktionieren. Allerdings scheinen Sie nach Cross-Schema-Abfragen zu suchen und bereits herausgefunden zu haben, was ich mir gerade ausgedacht habe.

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

Nun, dies ist mit handgefertigtem generiertem Code aus pwiz.py möglich. Ich bin sicher, es gibt einen eleganteren und faulen (d. h. nicht eifrig ) Möglichkeit, dies auch mit einer Art Factory zu tun, aber ich habe noch nicht viel Zeit mit Python oder PeeWee verbracht. Wenn ja, sollte pwiz.py für diesen Zweck auch ein zusätzliches Flag haben, denke ich.