Pregunta

Sé que esto existe

django-admin.py inspectdb > models.py

Sin embargo, hay una manera fácil de limitarlo? Sin borrar manualmente lo que no quiero.

Me estoy conectando a una base de datos que cuenta con más de un centenar de mesas, pero sólo quiero modelos de unos 4 o 5. ¿Hay una manera fácil de generar modelos de unas pocas mesas de dados?

Son bastante grandes mesas, así que no te gusta de escribir a todos ellos tampoco.

¿Fue útil?

Solución

Me acabo de hacer esto por mí mismo, también con Oracle. Es posible -. Pero no bastante

Si se asume que conoce los nombres de las tablas que desee -

django/db/backends/oracle/introspection.py abierta. Hay una get_table_list función:

def get_table_list(self, cursor):
    "Returns a list of table names in the current database."
    cursor.execute("SELECT TABLE_NAME FROM USER_TABLES")
    return [row[0].lower() for row in cursor.fetchall()]

Sólo reemplazarlo con algo como

def get_table_list(self, cursor):
    names = ['mytable1', 'mytable2', 'mytable3']
    return names

A continuación, ejecute su inspectdb y será mucho más manejable:)

Otros consejos

No utilizar syncdb > models.py. No es una práctica buena. Hacer que sus modelos de forma manual y añadir managed=False a ella. Si no va a añadir que todos sus tablas de la base se pueden eliminar por medio de mando único. Después de crear sus modelos a continuación, corren el syncdb de modo que las tablas están vinculadas.

Siguiendo solución dada por @pfctdayelise

Para django 1.8 motor MySQL

django/db/backends/mysql/introspection.py abierta y encontrar get_table_list función:

def get_table_list(self, cursor):
    cursor.execute("SHOW FULL TABLES")
    return [TableInfo(row[0], {'BASE TABLE': 't', 'VIEW': 'v'}.get(row[1]))
            for row in cursor.fetchall()]

reemplazarlo con algo como

def get_table_list(self, cursor):
    names = [TableInfo('mytable1', 't')]
    return names

Para decidir si el segundo argumento es TableInfo t o v, ejecute la consulta SHOW FULL TABLES MySQL y averiguar su table_type si es una continuación BASE_TABLE segundo argumento es otra cosa t v

A continuación, ejecute

python manage.py inspectdb > models.py

A partir de Django 1.10, el comando inspectdb toma una lista opcional de mesas en la línea de comandos que límites que serán inspeccionados tablas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top