0

私はこのPythonコードを持っています:

self.lock_tables("read", ['nets_permissions as n', 'devices_permissions as d'])
usrs = self.db.get("SELECT n.user_id FROM nets_permissions as n \
                    left join devices_permissions as d \
                    on n.user_id = d.user_id \
                    where d.user_id is null \
                    and n.network_id=%s and n.perm<>3", netid)
self.unlock_tables()

for usr in usrs:
    self.lock_tables("write", ['devices_permissions'])
    self.db.execute("INSERT devices_permissions SET \
                     user_id=%s, network_id=%s, device_id=%s, perm=%s",\
                     usr, netid, sensid, perm)
    self.unlock_tables();

最初にクエリを実行して、2つのテーブルからuser_idを取得します。このuser_idを1つの変数に保存し、forループを実行してこのレコードを別のテーブルに挿入したい...

このコードは機能しません。このエラーが発生します:

例外:Database.get()クエリに対して複数の行が返される

この複数の行を取得して、それらすべてを一度に処理するにはどうすればよいですか?

皆さん、ありがとうございました。

4

1 に答える 1

0

解決策は、 self.db.getの代わりにself.db.queryを使用することです。

self.lock_tables("read", ['nets_permissions as n', 'devices_permissions as d'])
usrs = self.db.query("SELECT n.user_id FROM nets_permissions as n \
                    left join devices_permissions as d \
                    on n.user_id = d.user_id \
                    where d.user_id is null \
                    and n.network_id=%s and n.perm<>3", netid)
self.unlock_tables()

for usr in usrs:
    self.lock_tables("write", ['devices_permissions'])
    self.db.execute("INSERT devices_permissions SET \
                     user_id=%s, network_id=%s, device_id=%s, perm=%s",\
                     usr['user_id'], netid, sensid, perm)
    self.unlock_tables();
于 2013-03-21T10:59:32.570 に答える