У меня есть функция, которая получает список таблиц БД в качестве параметра и возвращает командную строку для выполнения в этих таблицах, например:
pg_dump( file='/tmp/dump.sql',
tables=('stack', 'overflow'),
port=5434
name=europe)
Должен вернуть что-то вроде:
pg_dump -t stack -t overflow -f /tmp/dump.sql -p 5434 europe
Это делается с помощью tables_string='-t '+' -t '.join(tables)
.
Самое интересное начинается, когда функция вызывается с: tables=('stackoverflow')
(строка) вместо tables=('stackoverflow',)
(кортеж), что дает:
pg_dump -t s -t t -t a -t c -t k -t o -t v -t e -t r -t f -t l -t o -t w
-f /tmp/dump.sql -p 5434 europe
Потому что итерируется сама строка.
Этот вопрос SO предлагает использовать утверждения для типа, но я не уверен, что он достаточно Pythonic, потому что он нарушает соглашение о типе утки.
Есть идеи?
Адам
('foo')
вместо('foo',)
, верно? - person orip   schedule 21.11.2010