¿Quiere trasladar sus Airtable Bases a SeaTable y tiene miedo del esfuerzo? ¡No se preocupe! Incluso bases con estructuras de datos complicadas y muchos miles de registros de datos pueden ser rápidamente transferidos a SeaTable.
Hemos desarrollado un script de migración para transferir datos de Airtable a SeaTable. Esto transfiere todos los datos de una base Airtable - tablas, columnas, registros de datos - a una base SeaTable de una sola vez. Después de la migración, puede continuar en SeaTable con los datos que utilizó por última vez en Airtable. Después de ejecutar el script, sólo unos pocos ajustes son necesarios.
El script puede ser utilizado por cualquier persona, tanto técnicos como no técnicos. Sólo son necesarias unas pocas entradas manuales para que el script esté listo para su uso. En este artículo explicamos cómo hacerlo.
Cómo migrar una base de Airtable a SeaTable
1. crear la base
Cree una nueva base en SeaTable. El nombre de la base SeaTable no tiene que corresponder al nombre de la base Airtable a importar. Puede elegir el nombre libremente.
2. insertar script
En la nueva Base, abra la barra lateral de scripts haciendo clic en el icono de script de la cabecera de la Base, arriba a la derecha. A continuación, seleccione Añadir script. El script de migración está escrito en el lenguaje de programación Python. Por lo tanto, seleccione Python.
Ahora resalte el siguiente bloque de código, cópielo en el portapapeles y péguelo en la ventana izquierda del editor de scripts:
## Parameterize the script # SeaTable - Destination server_url = 'https://cloud.seatable.io' api_token = '...' # Add an API token of the SeaTable base # See https://seatable.io/docs/en/seatable-api/erzeugen-eines-api-tokens/ # for more information on how to create a SeaTable API token # Airtable - Source airtable_personal_access_token = '...' # Add a Personal Access Token (PAT) # PATs are 82-character strings and begin with "pat" (e.g. 'pat544WlSOq6T4Fvv.5710af6611aedbf28493c38084163494e02b24f078cf2d62f07105982a82a64d') # See https://support.airtable.com/docs/creating-personal-access-tokens/ # for more information on how to create a PAT in Airtable airtable_base_id = '...' # Add the Base ID of the Airtable base # Base IDs are alphanumeric strings and begin with "app" (e.g. 'appRfA3qspH3EJUnV') # See https://support.airtable.com/docs/finding-airtable-ids/ # for more information on where to find the id of an Airtable base table_names = ['...', '...'] # Add the names of all tables of the Airtable base, i.e. ['table 1', 'table 2'] # The names must be enclosed in '' and comma-separated first_columns = [ ('...', '...'), ('...', '...'), ] # Specify the names of the first columns in every table of the Airtable base # Use the format ('table_name', 'first_column_name'), i.e. ('table 1', 'ID') # The table and column name must be enclosed in '' and comma-separated links = [ ] # Specify the links between the tables in the Airtable base # Use the format ('table_name', 'column_name', 'other_table_name'), i.e., ('table 1', 'link to table 2', 'table 2') # The table and column names must be enclosed in '' and comma-separated # If the Airtable base contains no link columns, just leave the brackets empty from seatable_api.constants import ColumnTypes excluded_column_types = [ ColumnTypes.FILE ] # Specify the column types which are to be excluded from the data import when running the script in import-rows mode (excluded column types are still created in import-header mode) # Use the constants from https://developer.seatable.io/scripts/python/objects/constants/, i.e. ColumnTypes.FILE to exclude file columns # The specified column types must be comma-separated # If no column types are to be excluded, just leave the brackets empty # ColumnTypes.LINK_FORMULA are always excluded excluded_columns = [] # Specify the names of the columns which are to be excluded from the data import when running script in import-rows mode (excluded columns are still created in import-header mode) # Use the format ('table_name', 'column_name'), i.e. ('table 1', 'column A') # The table and column names must be enclosed in '' and comma-separated # If no columns are to be excluded, just leave the brackets empty mode = 'import-header' # Specify the run-mode of the script, two options: 'import-header' and 'import-rows' # Run 'import-header' first to create the data structure in the SeaTable base # Run 'import-rows' to import all the rows ## No more edits required beyond this row import sys from seatable_api import Base, AirtableConvertor def get_convertor(): base = Base(api_token, server_url) base.auth() convertor = AirtableConvertor( airtable_api_key=airtable_personal_access_token, airtable_base_id=airtable_base_id, base=base, table_names=table_names, first_columns=first_columns, links=links, ) return convertor def import_header(): convertor = get_convertor() convertor.convert_metadata() def import_rows(): convertor = get_convertor() convertor.convert_data() if mode == 'import-header': import_header() elif mode == 'import-rows': import_rows() else: print('The mode is not properly specified.') ## End script ##
No te preocupes si no entiendes el código que acabas de copiar. Se lo explicaremos. Los comentarios en el código deberían ayudar un poco con la interpretación. Los comentarios son todas las líneas con un signo de almohadilla ('#'). Estas líneas se ignoran cuando se ejecuta el script, es decir, puedes cambiar, borrar o añadir comentarios sin afectar a la funcionalidad del script.
A diferencia de los comentarios, las sangrías en el código son muy importantes a la hora de ejecutar el script. Por favor, no las cambie.
3. especifique la URL del servidor SeaTable y el token API de la base
Añada la URL del servidor SeaTable bajo el comentario SeaTable - Destino e introduzca el token API. El token API debe conceder permisos de lectura y escritura. Si está utilizando SeaTable Cloud, entonces la URL precargada "https://cloud.seatable.io" es correcta. Si está utilizando un servidor SeaTable diferente, introduzca su URL. (La URL debe introducirse siempre con https:// o http://.) La URL y el token deben ir entre comillas simples.
Este es un ejemplo de configuración para importar datos a una base en SeaTable Cloud:
4. introduzca Airtable Personal Access Token y Base ID
Añadir debajo del comentario Airtable - Fuente el Token de acceso personal Airtable (PAT) y el ID de la base de la mesa de aireambos valores de nuevo entre comillas simples. El PAT debe tener la autorización data.records:read
y schema.bases:read
disponible.
Este es el aspecto que debería tener, aunque sus valores serán, por supuesto, diferentes:
Utilice los enlaces del script a la documentación de Airtable para averiguar dónde puede obtener PAT y Base ID.
5. introduzca los nombres de las tablas y columnas
Ahora dígale al script qué tablas quiere importar de la Base Airtable. Haga esto en la línea "table_names". Añada los nombres de las tablas entre corchetes - cada uno encerrado por una sola coma invertida y separados por una coma.
Para una base con las dos tablas "tabla1" y "tabla2", la línea debe tener entonces este aspecto, por ejemplo:
Si su base Airtable tiene más de dos tablas, simplemente amplíe la lista entre paréntesis. Si no desea transferir todas las tablas de una base, simplemente omita los nombres de las tablas que no se van a copiar.
Debido a una limitación de la API Airtable, también debe especificar los nombres de las primeras columnas en las tablas. Esto se hace en la línea "first_columns" o las siguientes líneas.
Para la base Airtable con las dos tablas "table1" y "table2" podría tener este aspecto:
6. definir columnas de enlace
Para que SeaTable importe los datos correctamente, se requiere un paso más: la especificación de las columnas de enlace en la Base Airtable.
La variable "enlaces" está destinada a este fin. Por ejemplo, si la columna "enlace a tabla2" de la tabla "tabla1" representa un enlace a la tabla "tabla2", el script debe parametrizarse de la siguiente manera:
Sólo tiene que especificar una vez cada par de columnas de enlace. No es necesario especificar el enlace en ambas direcciones.
Si la base de la mesa de aire no recibe ninguna columna de enlace, puede dejar el soporte cuadrado vacío:
7. excluir columnas o tipos de columnas (opcional)
Si no desea copiar todas las columnas o tipos de columnas de Airtable a SeaTable, puede excluirlas. Excluir una columna o tipo de columna asegura que la columna se crea en la Base SeaTable, pero los datos que contiene no se transfieren. Excluyendo columnas con grandes cantidades de datos - y estamos pensando en particular en columnas de archivos - puede reducir significativamente el tiempo de ejecución del script. Excluir columnas con un gran volumen de datos es especialmente útil para una prueba de migración.
Los tipos de columnas pueden excluirse mediante la variable "excluded_column_types". Para especificar los tipos de columnas que deben excluirse, utilice las constantes de Python previstas a tal efecto. Las columnas individuales pueden excluirse mediante la variable "excluded_columns". La especificación es análoga a la variable "primeras_columnas" en el formato ('nombre de tabla', 'nombre de columna'). Si desea excluir varias columnas, los valores deben ir separados por comas.
8. importar tablas y columnas
El script puede ejecutarse en dos modos: "importar-cabecera" e "importar-filas". En primer lugar, el script debe ejecutarse siempre en modo "import-header". En este modo, las tablas y columnas se crean en la base SeaTable y se importan 10 filas de prueba.
El modo de ejecución se define mediante la variable del mismo nombre:
Ahora ejecute el script haciendo clic en Ejecutar script. Mientras se ejecuta el script, puede ver los pasos que se han llevado a cabo en la parte derecha del editor. En segundo plano también puede ver cómo se crean las tablas y columnas.
9. comprobar las líneas de prueba
Compruebe ahora si
- se han importado todas las tablas y todas las columnas,
- se ha creado la primera columna correcta en todas las tablas y
- las columnas de enlace son correctas.
Como los tipos de columna de Airtable y SeaTable no son completamente congruentes, algunos tipos de columna en la Base SeaTable diferirán de los de la Base Airtable. La siguiente tabla muestra cómo los tipos de columna en Airtable se transfieren a SeaTable.
Tipo de columna ventilable | Importar a SeaTable Tipo de columna |
---|---|
Adjunto | Archivo |
Autonúmero | Texto |
Código de barras | Texto |
Botón | - |
Casilla de verificación | Casilla de verificación |
Cuenta | - |
Creado por | Texto |
Hora de creación | Fecha |
Moneda | Número |
Fecha | Fecha |
Duración | Duración |
Envíe un correo electrónico a | Correo electrónico |
Fórmula | Fórmula (con marcador de posición) |
Última modificación | Texto |
Última modificación | Fecha |
Enlace a otro registro | Enlace a otras entradas |
Texto largo | Texto con formato |
Búsqueda | - |
Selección múltiple | Selección múltiple |
Número | Número |
Porcentaje | Número |
Número de teléfono | Texto |
Clasificación | Clasificación |
Enrollable | - |
Texto de una línea | Texto |
Selección individual | Selección individual |
Usuario | Texto |
URL | URL |
Las columnas de fórmula y los tipos de columna de Airtable Count, Lookup y Rollup desempeñan un papel especial. Para las primeras, se crea una columna de fórmula con el resultado "Fórmula por definir" en la Base SeaTable. Desafortunadamente, actualmente no es posible traducir automáticamente una fórmula Airtable en una fórmula SeaTable. La situación es similar con los otros tipos de columnas mencionados. Estas no son creadas automáticamente por el script. Aquellas columnas que no son creadas por el script están listadas en la tabla separada "Columnas a migrar manualmente".
Si algo no es correcto, borre las tablas creadas por el script y compruebe las entradas de los pasos 5 y 6. A continuación, ejecute de nuevo el script en modo "importar cabecera". Puede ejecutar el script tantas veces como desee.
10. importar todos los registros de datos
Si está satisfecho con la comprobación del paso 9, se pueden transferir todos los registros de datos.
En el script, cambia el modo de "importar-cabecera" a "importar-filas":
Vuelva a ejecutar el script haciendo clic en Ejecutar script. De nuevo, puede observar la ejecución del script en la parte derecha y ver las actividades en segundo plano.
Ahora debería ver todos los registros de la Base Airtable en la nueva Base SeaTable. ¡Enhorabuena, la migración de los conjuntos de datos se ha completado!
Si no está satisfecho con el resultado final, elimine todas las tablas y comience de nuevo en el paso 5.
11. finalizar la migración
El script de migración ha transferido todos los datos. Es posible que aún sea necesario realizar algunos retoques manuales.
En primer lugar, debe añadir las fórmulas en columnas de fórmulas y añadir las columnas que no se crearon automáticamente y que figuran en la tabla "Columnas que deben migrarse manualmente".
Por otro lado, también debe crear vistas usted mismo, ya que estas no son transferidas desde la Base de Airtable. Lo mismo se aplica a las automatizaciones, interfaces y scripts.
Área FAQ
¿Cambia el script los datos de mi Airtable Base?
No. El script sólo lee la base de la mesa de aire. Los datos de la base de la mesa de aire no se modifican.
¿Qué hago si recibo un mensaje de error?
Un mensaje de error en la primera ejecución no es en absoluto improbable. Hay muchas razones para ello, por ejemplo, un token incorrecto, una secuencia incorrecta en la especificación de los enlaces, errores tipográficos, comas que faltan o sangría incorrecta. Un solo error puede hacer que se cancele la ejecución del script.
Si recibes un mensaje de error, generalmente no es un problema. No se puede perder ningún dato. Proceda como se indica a continuación para encontrar la causa del error:
- En la mayoría de los casos, el mensaje de error le dará una pista de dónde encontrar el error. Sígala, corrija los parámetros introducidos y vuelva a ejecutar el script. Un error de sangría, por ejemplo, indica que la sangría no se corresponde con la sintaxis de Python.
- Si el mensaje de error es incomprensible, compruebe que todas las entradas son correctas y vuelva a intentarlo.
- Si ninguno de los consejos le ayuda, busque ayuda en el Foro SeaTable.
¿Se pueden migrar bases Airtable de cualquier tamaño?
En principio, sí. Sin embargo, el procedimiento presentado en este artículo con el editor Python integrado está sujeto a un límite máximo de ejecución de 15 minutos, es decir, los scripts que se ejecutan durante más de 15 minutos se cancelan. En la práctica, esto es suficiente para la gran mayoría de las bases. Sin embargo, este límite puede jugar un papel importante para las bases con archivos adjuntos grandes/muchos. En este caso, puede reducir el tiempo de ejecución excluyendo columnas. Si no desea excluir columnas, debe ejecutar el script Python localmente en un ordenador en el que no haya límite de tiempo de ejecución.
¿Es posible importar tablas a una base existente?
El script no requiere que la base esté vacía. Así que también puede ejecutar el script en una base con tablas existentes y rellenas. Lo único que debe evitar es duplicar los nombres de las tablas.