Generar un par de modelos de base de datos existente en Django
-
23-09-2019 - |
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.
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.