2017-05-17 14 views
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を使用しています。

答えて

0

私は愚かな気がするが、私は問題を見る。

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')) 

は次のようになります。

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')) 
関連する問題