0

MySQL データベースのクエリにSQLSoupを使用したいと考えています。

発行したいクエリに複数の結合が含まれています。残念ながら、チュートリアルの例には、まったく異なる列名を持つテーブルが含まれています (テーブル間で列名が重複していません)。

私の場合、すべてのテーブルにpkeyという名前の列がありますid

私は次のことを行います:

s = SQLSoup(DATABASE_URI)
s.join(s.logical_interface, s.with_labels(s.physical_interface), s.physical_interface.id == s.logical_interface.physical_interface_id).first()

結果は次のとおりです。

InvalidRequestError: Implicitly combining column logical_interface.physical_interface_id with column foo.physical_interface_id under attribute 'physical_interface_id'.  Please configure one or more attributes for these same-named columns explicitly

したがって、私は次のことを行います:

結果は次のようになります (以下の完全なクエリを参照してください)。

OperationalError: (OperationalError) (1066, "Not unique table/alias: 'foo'") 'SELECT foo.logical_interface_id AS ... 

すべてのテーブルに同じテーブル エイリアスfooが使用されているようで、明らかに問題が発生しています。

これを行う正しい方法はありますか?


完全なクエリ:

'SELECT foo.logical_interface_id AS foo_logical_interface_id, foo.logical_interface_physical_interface_id AS foo_logical_interface_physical_interface_id, foo.logical_interface_name AS foo_logical_interface_name, foo.logical_interface_description AS foo_logical_interface_description, foo.logical_interface_active AS foo_logical_interface_active, foo.logical_interface_ifindex AS foo_logical_interface_ifindex, foo.logical_interface_ifinoctets AS foo_logical_interface_ifinoctets, foo.logical_interface_ifoutoctets AS foo_logical_interface_ifoutoctets, foo.logical_interface_lastpolloctets AS foo_logical_interface_lastpolloctets, foo.logical_interface_ifsigqunerroreds AS foo_logical_interface_ifsigqunerroreds, foo.logical_interface_ifsigqcorrecteds AS foo_logical_interface_ifsigqcorrecteds, foo.logical_interface_ifsigquncorrectables AS foo_logical_interface_ifsigquncorrectables, foo.logical_interface_lastpollfec AS foo_logical_interface_lastpollfec, foo.physical_interface_id AS foo_physical_interface_id, foo.physical_interface_docsis_mac_id AS foo_physical_interface_docsis_mac_id, foo.physical_interface_name AS foo_physical_interface_name, foo.physical_interface_type AS foo_physical_interface_type, foo.physical_interface_module AS foo_physical_interface_module \nFROM (SELECT logical_interface.id AS logical_interface_id, logical_interface.physical_interface_id AS logical_interface_physical_interface_id, logical_interface.name AS logical_interface_name, logical_interface.description AS logical_interface_description, logical_interface.active AS logical_interface_active, logical_interface.ifindex AS logical_interface_ifindex, logical_interface.ifinoctets AS logical_interface_ifinoctets, logical_interface.ifoutoctets AS logical_interface_ifoutoctets, logical_interface.lastpolloctets AS logical_interface_lastpolloctets, logical_interface.ifsigqunerroreds AS logical_interface_ifsigqunerroreds, logical_interface.ifsigqcorrecteds AS logical_interface_ifsigqcorrecteds, logical_interface.ifsigquncorrectables AS logical_interface_ifsigquncorrectables, logical_interface.lastpollfec AS logical_interface_lastpollfec \nFROM logical_interface) AS foo INNER JOIN (SELECT physical_interface.id AS physical_interface_id, physical_interface.docsis_mac_id AS physical_interface_docsis_mac_id, physical_interface.name AS physical_interface_name, physical_interface.type AS physical_interface_type, physical_interface.module AS physical_interface_module \nFROM physical_interface) AS foo ON physical_interface.id = logical_interface.physical_interface_id \n LIMIT %s' (1,)
4

1 に答える 1

1

答えはノーだ"。

その理由は、SQLSoup が保守されておらず、時代遅れになっているためです (SQLSoup の保守担当者は私だけなので、これを言うことができます)。SQLSoupの最新の代替として私が作成した automap を使用します。

于 2014-04-12T22:50:53.357 に答える