Since we're on the topic, it'd be great if `inspectdb` also accepted a `--tables` option, to only move certain tables in the database. For example:
./manage.py inspectdb --tables=form_*,user_* ...to import any tables starting with 'form_' or 'user_'. Allow with the `--database` option, this would allow moving over certain features app-by-app more easily when migrating a large project, without having to do a "dump all, remove cruft", which can be time consuming with very large legacy systems. Regards, Tim On Sunday, November 1, 2015 at 12:52:46 AM UTC-4, José Tomás Tocino wrote: > > Hi there. > > I have an Oracle database that I access from Django with a user with > limited privileges that can access some special views the DBA has set up > for me. I wanted to use inspectdb to automatically generate the models for > those views, but it didn't work. > > The problem is that the SQL statement that Django uses to fetch the tables > and views [1] for the current user does not properly return the views I > need because the user does not own them, and USER_VIEWS only returns those > VIEWS owned by the user. Not owning a table or a view should not be an > obstacle for automatically generating a model, so my proposal is to extend > the inspectdb to allow selecting what tables and views should be considered > for inspection. This would enable the inspection of tables and/or views > that the user does not own, as long as their name is known. > > It would be very easy to do, just add an optional positional argument to > the inspectdb commands for the names of the tables/views and, if it's > available, just inspect those tables/views instead of those returned by the > introspection service. > > Here's a patch of a possible solution: > > --- django/django/core/management/commands/inspectdb.py 2015-10-31 > 20:50:57.401113597 +0100 > +++ > /home/jose/.virtualenvs/ori2/lib/python3.4/site-packages/django/core/management/commands/inspectdb.py > 2015-10-31 > 20:52:26.241112474 +0100 > @@ -19,6 +19,8 @@ > parser.add_argument('--database', action='store', dest='database', > default=DEFAULT_DB_ALIAS, help='Nominates a database to ' > 'introspect. Defaults to using the "default" database.') > + parser.add_argument('table', action='store', nargs='*', type=str, > + help='Selects what tables or views should be > introspected') > > def handle(self, **options): > try: > @@ -50,7 +51,12 @@ > yield '' > yield 'from %s import models' % self.db_module > known_models = [] > - for table_name in > connection.introspection.table_names(cursor): > + if options['table']: > + tables_to_introspect = options['table'] > + else: > + tables_to_introspect = > connection.introspection.table_names(cursor) > + > + for table_name in tables_to_introspect: > if table_name_filter is not None and > callable(table_name_filter): > if not table_name_filter(table_name): > continue > > Regards > > P.S.: sorry if I messed up any rule of the contribution guidelines, I'm > not used to contributing to large open source projects. > > [1] > https://github.com/django/django/blob/master/django/db/backends/oracle/introspection.py#L54 > -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at http://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/cf7ca8ac-b1a7-46ad-9ec9-41a7cccedfb4%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.