FTP (S) использует случайные порты для настройки соединений данных ; частота прерывистого успеха указывает, что не все порты разрешены брандмауэром на клиентских и / или серверных машинах. Диапазон портов для входящих (PASV) соединений данных может быть установлен на FTP-сервере.
Эта страница имеет приятное резюме:
простой способ - просто разрешить FTP-серверам и клиентам неограниченный доступ через ваш брандмауэр, но если вы хотите ограничить их доступ к «известным» портам, вам нужно понять 4 разных сценария.
1) FTP серверу должно быть разрешено принимать TCP-соединения к порту 21 и устанавливать TCP-соединения из порта 20 в любой (удаленный эфемерный) порт.
2) FTP-серверу разрешено принимать TCP-соединения к порту 21 , AND также принимать TCP-соединения с любым эфемерным портом!
3) FTP-клиенту должно быть разрешено подключать TCP к порту 21 и принимать TCP-соединения из порта 20 в любой эфемерный порт.
4) FTP-клиенту должно быть разрешено подключать TCP к порту 21, а также устанавливать TCP-соединения на любой другой (удаленный эфемерный) порт!
blockquote>
Благодаря объединенному наследованию таблиц SQLA прекрасно справляется с задачей, позволяя вам забыть о том, что используются даже две таблицы.
Ваша тестовая установка не вставляет никаких данных в tracker_locations
, как было бы в случае, если вы создали экземпляр экземпляра Riders
и вставили данные через ORM.
Вот часть соединения запроса, который генерирует SQLA:
FROM tracker_locations JOIN riders ON tracker_locations.id = riders.id
В тестируемом наборе данных нет строки в tracker_locations
, поэтому условие соединения tracker_locations.id = riders.id
не оценивает верно.
Итак, если вы также включите некоторые тестовые данные в таблицу tracker_locations
, они будут работать:
tracker_locations_test_data = {'id': 1, 'type': 'riders'}
self.cur.execute(
'INSERT INTO tracker_locations VALUES (?,?)',
tuple(tracker_locations_test_data.values()))