Несколько строк из запроса MySQL сохранены в структуре массива
У меня есть этот код 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();
Сначала я делаю запрос для получения некоторого user_id из двух таблиц. Я хочу сохранить этот user_id в одной переменной, а затем сделать цикл for, чтобы вставить эти записи в другую таблицу...
Этот код не работает. Я получаю эту ошибку:
Исключение: несколько строк возвращено для запроса Database.get()
Как я могу получить эти несколько строк, а затем обработать все из них одновременно?
Спасибо вам всем.
1 ответ
Решение
Решение состоит в том, чтобы использовать self.db.query вместо self.db.get!
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();