Django - DatabaseError: No such table


I defined two models:

class Server(models.Model):
    owners = models.ManyToManyField('Person')

class Person(models.Model):
    name = models.CharField(max_length=50)

After that I even checked the sql, just for fun:

CREATE TABLE "servers_server_owners" (
    "id" integer NOT NULL PRIMARY KEY,
    "server_id" integer NOT NULL,
    "person_id" integer NOT NULL,
    UNIQUE ("server_id", "person_id")
CREATE TABLE "servers_server" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL,
    "port" integer unsigned NOT NULL,
    "state" integer NOT NULL
CREATE TABLE "servers_person" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL

There it even says CREATE TABLE "servers_server_owners"

I ran syncdb to install the new models to the database. I went to the admin-interface to define some objects to play with, but I got the following error:

DatabaseError at /admin/servers/server/1/  
no such table: servers_server_owners

I shutdown the dev-server, ran syncdb again, started the server: Still same problem. Why can't it find, the table, even though it just told me it created id?

7/16/2015 1:12:30 PM

Accepted Answer

Actually the problem was that the table never got created. Since I am fairly new with django, I did not know that ./ syncdb does not update existing models, but only creates the ones that do not exist.

Because the model 'Server' existed before I added the other model, and it was already in the db, 'syncdb' did not actually create the new tables.

4/10/2012 11:51:53 AM

As a tip for the future, look into South, a very useful utility for applying your model changes to the database without having to create a new database each time you've changed the model(s).

With it you can easily: python migrate app_name and South will write your model changes. The documentation is pretty straightforward.

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow