Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

creating django model for existing database/sql view?

I have inserted a definition for a view in $template_dir/sql/$someTableName.sql file. (create or replace view) so every time I run syncdb, the db views are created.

Can I create in models.py a python class which accesses that view?

Is it better practice to just use python's raw sql functionality instead?

---EDIT---

Another problem I have is that the view doesn't have a primary key, but django seems to be assuming there will be one because I get an error caught an exception while rendering: (1054, "Unknown column 'appName_currentleagues.id' in 'field list'") But I don't have such a member defined:

Class CurrentLeagues(models.Model):
        League = models.ForeignKey(League)
        class Meta:
                managed = False

So my guess is that django reasonably sees that I don't define a primary key in the CurrentLeagues class, so Django assumes there's one called id. Is there a way to tell Django that there is no primary key (since this is actually a view), or is that not even my problem?

like image 595
Alexander Bird Avatar asked Feb 11 '10 16:02

Alexander Bird


People also ask

Can you use Django with an existing database?

In order to use an existing database in Django, you need to have a model for each table. Creating models for existing tables manually is just too much work. However, there's no need to do that, since Django has a builtin tool to solve this exact problem.

What is the Django command to view a database schema of an existing database?

Django inspectdb command Django provides a utility to auto-generate models from an existing database via inspectdb command.


1 Answers

See Unmanaged models

You define the model as usual and add managed = False to the meta options:

class MyModel(models.Model):
    ...
    class Meta:
         managed = False
like image 63
Will Hardy Avatar answered Oct 08 '22 11:10

Will Hardy