在Django中使用现有的数据库

8

我在Django应用程序中使用多个数据库。 default 数据库是Django为用户身份验证等创建的数据库。然后我有一个名为vo的数据库,其中包含现有数据,我计划将其用于内容生成。

我希望models.py中的类与vo中现有的表相对应。 但是,当我这样做时

manage.py syncdb --database=vo

创建了一组新的空表。顺便提一下,这是一个SQLite3数据库。

如何将数据库中现有的表与Django中的models.py类进行关联?

非常感谢。


你想要实际链接,使得vo中的更改反映在查询中,还是将vo复制到默认值中就足够了? - msw
你想在多个数据库之间创建外键吗? - Zulu
实际上,只需将数据库镜像到models.py中即可。可以通过下面的答案实现这一点。此外,不需要使用ForeignKey。谢谢。 - valuenaut
1个回答

19
  1. 你需要将你的数据库vo添加到设置中。

如果你的数据库设置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': os.path.join(DIR, 'django.sqlite3'),
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    },
}

像这样向其中添加vo数据库设置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': os.path.join(DIR, 'django.sqlite3'),
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    },

    # this your existing db 
    'vo': { 
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(DIR, 'vo.sqlite'),
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    },
}
  1. Then you can generate models automatically from the database.

    $ ./manage.py inspectdb --database=vo > your_app/models.py
    
  2. Configure database routers.

查看: 使用Django的多数据库支持


1
非常感谢,这个好使。现在我只需要编辑和完善它生成的models.py文件了。 - valuenaut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接