SQLAlchemyを使用していますが、宣言的な方法ではないため、SOAP Webサービス(動的クラス)によってデータが供給されているデータベースを作成しようとしています。Sqlalchemy ORMテーブル間の非宣言的リンク
オブジェクトのさまざまな部分の間にマッピングを作成することに問題があります。これは、テーブルが外部キーをサポートしていないMySQLのMyISAMテーブルにあるという事実により難しくなっています。
import sqlalchemy
dbE = sqlalchemy.create_engine('create string')
dbM = sqlalchemy.MetaData()
dbM.bind = dbE
class Invoice(object):
pass
class LineItem(object):
pass
InvoiceTbl = sqlalchemy.Table('Invoices', dbM, autoload = True)
LineItemTbl = sqlalchemy.Table('Invoices_Items', dbM, autoload = True)
LineItemMapper = orm.mapper(InvoiceLineItemTbl, InvoiceLineItemTbl)
InvoiceMapper = orm.mapper(Invoice, InvoiceTbl)
sm = orm.sessionmaker(bind = dbE, autoflush = True, autocommit = False,
expire_on_commit = True)
session = orm.scoped_session(sm)
私は、次のと別途請求書の異なる部分を照会することができます上記の使用して、オブジェクトをマッチングテーブルに存在する列に読み込まれます:私は何をしたいか
invoiceData = session.query(Invoice).filter(Invoice.InvoiceNumber.like('12345'))
invoiceItems = session.query(LineItem).filter(LineItem.InvoiceNumber.like('12345'))
請求書の一部としてのLineItemsを作るです:
orm.mapper(Invoice, InvoiceTbl properties={
'LineItems' : orm.relation(LineItem),
})
しかし、これはそれについてのエラーで戻ってくることはunderst(2オブジェクト/テーブル間の関係について知りません外部キーが存在しないことを前提とする)。私は別のパラメータ(primaryjoin、backrefなど)を試してきましたが、これまで成功していません。
これは最善の方法ではないかもしれませんが、この特定のスクリプトはデータ駆動型であり、SOAPサービスが変更された場合には多少動的である必要があります。
編集: shahjapanのprimaryjoin引数の提案が役立ちますが、「primaryjoin条件の関係方向を判断できませんでした」というエラーが表示されますので、正しいトラックにいると想定しています。
動作していない、私は宣言的なフォームを使用するときにのみ動作すると思います。 – David
@David:それはクラス本体ではなくテーブル宣言に属します。それはこの意味でより意味がありますか? – SingleNegationElimination
それは完璧に動作します! – David