tengo una función que obtiene una lista de tablas de BD como parámetro y devuelve una cadena de comandos para ejecutar en estas tablas, por ejemplo:manera Pythonic para verificar parámetro es una secuencia pero no cadena
pg_dump(file='/tmp/dump.sql',
tables=('stack', 'overflow'),
port=5434
name=europe)
En caso devolver algo como:
pg_dump -t stack -t overflow -f /tmp/dump.sql -p 5434 europe
Esto se hace usando tables_string='-t '+' -t '.join(tables)
.
La diversión comienza cuando la función es llamada con: tables=('stackoverflow')
(una cadena) en lugar de tables=('stackoverflow',)
(una tupla), lo que da:
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
Debido a la propia cadena está siendo iterado.
This SO question sugiere que se utilice afirma en el tipo, pero no estoy seguro de que es lo suficientemente Pythonic porque rompe la convención de tipo pato.
¿Algún conocimiento?
Adam
Usted se refiere a un usuario usando '('foo')' por error en lugar de '('foo',) ', ¿verdad? – orip
@orip Ese es el punto: los usuarios podrían hacer este error, y quiero evitar que suceda. –