0
は、次の二つのORMクラスを考える:IN_とSQLAlchemyのORMと、ArgumentError()
class Indi(conn.pampas.Base):
'SQLAlchemy class defining the pampas indi table.'
__tablename__ = 'indi'
__table_args__ = {'keep_existing': True}
__module__ = 'pampas.sql.tables.pampas'
cid_indicator_key = sqlalchemy.Column(sqlalchemy.String(200), primary_key=True, nullable=False, doc='col_doc, primary_key=True, nullable=False)')
cfl_active = sqlalchemy.Column(sqlalchemy.String(1), nullable=False, doc='Column(String, nullable=False)')
ctx_desc = sqlalchemy.Column(sqlalchemy.String(200), nullable=False, doc='Column(String, nullable=False)')
cfl_indicator_type = sqlalchemy.Column(sqlalchemy.String(1), nullable=False, doc='Column(String, nullable=False)')
nno_timeout = sqlalchemy.Column(sqlalchemy.Integer(), nullable=False, doc='Column(Integer, nullable=False)')
ctx_tooltip = sqlalchemy.Column(sqlalchemy.String(500), doc='Column(String, nullable=False)')
ctx_hyperlink = sqlalchemy.Column(sqlalchemy.String(2000), doc='Column(String, nullable=False)')
def __repr__(self):
'Returns repr(self).'
fmt_str = "<{cls}({cid_indicator_key}={cid_indicator_key!r}, {cfl_active}={cfl_active!r}, {ctx_desc}={ctx_desc!r}, {cfl_indicator_type}={cfl_indicator_type!r}, {nno_timeout}={
nno_timeout!r}, {ctx_tooltip}={ctx_tooltip!r}, {ctx_hyperlink}={ctx_hyperlink!r})>"
params = {
'cls': type(self).__name__,
'cid_indicator_key': self.cid_indicator_key,
'cfl_active': self.cfl_active,
'ctx_desc': self.ctx_desc,
'cfl_indicator_type': self.cfl_indicator_type,
'nno_timeout': self.nno_timeout,
'ctx_tooltip': self.ctx_tooltip,
'ctx_hyperlink': self.ctx_hyperlink,
}
return fmt_str.format(**params)
class IndiHierarchy(conn.pampas.Base):
'SQLAlchemy class defining the pampas indi_hierarchy table.'
__tablename__ = 'indi_hierarchy'
__table_args__ = {'keep_existing': True}
__module__ = 'pampas.sql.tables.pampas'
cid_parent_indicator_key = sqlalchemy.Column(sqlalchemy.String(200), sqlalchemy.ForeignKey('indi.cid_indicator_key'), primary_key=True, nullable=False, doc="col_doc, primary_key=T
rue, nullable=False, foreign_key='indi.cid_indicator_key')")
cid_child_indicator_key = sqlalchemy.Column(sqlalchemy.String(200), sqlalchemy.ForeignKey('indi.cid_indicator_key'), primary_key=True, nullable=False, doc="col_doc, primary_key=Tr
ue, nullable=False, foreign_key='indi.cid_indicator_key')")
nno_seq_num = sqlalchemy.Column(sqlalchemy.Integer(), nullable=False, doc='Column(Integer, nullable=False)')
cid_layout_id = sqlalchemy.Column(sqlalchemy.String(200), doc='Column(String, nullable=False)')
ctx_url_params = sqlalchemy.Column(sqlalchemy.String(100), doc='Column(String, nullable=False)')
cid_plugin_id = sqlalchemy.Column(sqlalchemy.String(200), sqlalchemy.ForeignKey('plugin.plugin_id'), doc="Column(String, nullable=False, foreign_key='plugin.plugin_id')")
ctx_created_by = sqlalchemy.Column(sqlalchemy.String(1), nullable=False, doc='Column(String, nullable=False)')
cid_plant = sqlalchemy.Column(sqlalchemy.String(10), doc='Column(String, nullable=False)')
cid_version = sqlalchemy.Column(sqlalchemy.Float(), nullable=False, server_default=sqlalchemy.schema.FetchedValue(), doc='Column(Float, nullable=False, server_default=FetchedValue
)')
indi_child = sqlalchemy.orm.relationship(("'Indi'",), backref=sqlalchemy.orm.backref('indi_hierarchy_child'), primaryjoin='IndiHierarchy.cid_child_indicator_key == Indi.cid_indica
tor_key')
indi_parent = sqlalchemy.orm.relationship(("'Indi'",), backref=sqlalchemy.orm.backref('indi_hierarchy_parent'), primaryjoin='IndiHierarchy.cid_parent_indicator_key == Indi.cid_ind
icator_key')
plugin = sqlalchemy.orm.relationship(("'Plugin'",), backref=sqlalchemy.orm.backref('indi_hierarchy'))
def __repr__(self):
'Returns repr(self).'
fmt_str = "<{cls}({cid_parent_indicator_key}={cid_parent_indicator_key!r}, {cid_child_indicator_key}={cid_child_indicator_key!r}, {nno_seq_num}={nno_seq_num!r}, {cid_layout_id
}={cid_layout_id!r}, {ctx_url_params}={ctx_url_params!r}, {cid_plugin_id}={cid_plugin_id!r}, {ctx_created_by}={ctx_created_by!r}, {cid_plant}={cid_plant!r}, {cid_version}={cid_version
!r})>"
params = {
'cls': type(self).__name__,
'cid_parent_indicator_key': self.cid_parent_indicator_key,
'cid_child_indicator_key': self.cid_child_indicator_key,
'nno_seq_num': self.nno_seq_num,
'cid_layout_id': self.cid_layout_id,
'ctx_url_params': self.ctx_url_params,
'cid_plugin_id': self.cid_plugin_id,
'ctx_created_by': self.ctx_created_by,
'cid_plant': self.cid_plant,
'cid_version': self.cid_version,
}
return fmt_str.format(**params)
私は、次のクエリを試みる:
と、ArgumentError:
indi_upd_keys = ('W10_IPST_SERVERHEALTH_LOAD',)
with conn.pampas.session() as session:
query2 = session.query(tables.pampas.Indi).filter(tables.pampas.Indi.cid_indicator_key.in_(indi_upd_keys))
print(query2)
print(session.execute(query2))
これは、次のエラーが発生します。関係 'indi_child'は、クラスまたはマッパー引数(受け取った:<クラス 'tuple'>)
これは私がin_()
メソッドを使用したために発生しているようです。しかし、私はin_()
を使ってはいけません。
私は必要なものを達成するためのよりよい方法がありますか? cid_indicator_key
フィールドに複数の潜在的な値をマッチさせる能力が必要です。 in_()
オペレータはこのように見えました。私が間違っている?
私は自分のリレーションシップを異なって定義すべきですか?私はそこにあると知っています... 特色とbackref
を使用しています。