【问题标题】:Django not create database tableDjango不创建数据库表
【发布时间】:2011-06-01 22:50:33
【问题描述】:

嘿, 我已经创建了一个数据库。现在我更新了 UserProfile:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique = True, related_name = 'user')
    follows = models.ManyToManyField("self", related_name = 'follows') <-- NEW LINE

所以python manage.py sqlall myapp 回复我:

[...]
CREATE TABLE "myapp_userprofile_follows" (
    "id" integer NOT NULL PRIMARY KEY,
    "from_userprofile_id" integer NOT NULL,
    "to_userprofile_id" integer NOT NULL,
    UNIQUE ("from_userprofile_id", "to_userprofile_id")
)
[...]

当我运行python manage.py syncdb:

Creating tables ...
Installing custom SQL ...
Installing indexes ...
No fixtures found.

但是当我尝试向其中插入数据时,没有创建表。为什么? (我在本地测试,使用 sqlite3)

【问题讨论】:

标签: python django


【解决方案1】:

manage.py syncdb 不会修改现有表以添加或删除字段。您需要手动修改数据库,或使用 South 之类的工具来创建自动数据库迁移(这是我强烈推荐的)

【讨论】:

  • ManyToManyField 应该创建一个新表,而不是添加或删除列。即使有ManyToManyField,我应该在南方吗?
  • 他也可以运行manage.py reset myapp 来删除表并从新数据开始。由于他添加了一个不需要的字段,我认为他也可以运行 dumpdata 来获取一个夹具,重置然后加载到夹具中。
  • @Fred,它的工作方式是syncdb 查看您项目中的模型,然后查看数据库以查看该模型的表是否已存在。如果是,则假定该模型的所有内容都已配置,这意味着它甚至看不到新的ManyToManyField。所以是的,即使添加 ManyToManyField 只会创建一个新表,您仍然需要为此使用 South(或自己修改数据库)。
  • 当然,我可以手动创建表,但是索引呢?除了表之外,Django 还为各种表创建索引。南管这个?顺便说一句,我一会儿去看看。
  • 来自Django 1.4 site,“为 INSTALLED_APPS 中尚未创建表的所有应用程序创建数据库表。”。它应该创建表,但实际上并不总是这样做,这可能是 1.4 中的一个错误(在 1.3 中从未见过),这是关于哪个版本的?无论如何,正如 Keegan 所提到的,manage.py reset myapp 可以正确地重新创建表格。可悲的是,Django 在那个领域真的很缺乏......
【解决方案2】:

您是否已将您的应用添加到 settings.pys 中的 INSTALLED_APPS:

settings.py

INSTALLED_APPS = (
    ... ,
    'my_app',
)

https://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#installed-apps

【讨论】:

  • 好吧,我想我应该已经弄清楚了。非常抱歉尝试提供帮助
  • 没问题的家伙。还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多