Django中2个数据库(mySQL)的问题

时间:2016-02-09 16:08:20

标签: python mysql django

我在Django中制作2个数据库时出现问题,我遵循[官方示例],但是当我尝试启动服务器时,我得到语法错误:语法无效(指向vnosdatabase的settings.py文件(参见下文) )。

我试图取得的成就是将“vnos”与“vnos”区分开来。来自项目和应用程序的其余部分的应用程序,具有不同的数据库。

我的相关文件如下所示:

settings.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'testdatabase',
    'USER': 'root',
    'PASSWORD': 'Xma47data',
    'HOST': 'localhost',
    'PORT': '3306',
    },
'vnosdatabase': {       #not sure what to give here
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'vnosdatabase',
    'USER': 'root',
    'PASSWORD': 'Xma47data',
    'HOST': 'localhost',
    'PORT': '3306',
    } 
}
DATABASE_ROUTERS = ['vnos.routers.vnosRouter',]  #routers.py located in vnos directory

models.py

from django.db import models

class Cost(models.Model):
cost = models.FloatField()
amount = models.FloatField()

class Meta:
    app_label = 'vnos1'

routers.py

class vnosRouter(object):
"""
A router to control all database operations on models in the
vnos application.
"""
def db_for_read(self, model, **hints):
    """
    Attempts to read vnos models go to vnosdatabase.
    """
    if model._meta.app_label == 'vnos1':
        return 'vnosdatabase'
    return None

def db_for_write(self, model, **hints):
    """
    Attempts to write vnos models go to vnosdatabase.
    """
    if model._meta.app_label == 'vnos1':
        return 'vnosdatabase'
    return None

def allow_relation(self, obj1, obj2, **hints):
    """
    Allow relations if a model in the vnos app is involved.
    """
    if obj1._meta.app_label == 'vnos1' or \
       obj2._meta.app_label == 'vnos1':
       return True
    return None

def allow_migrate(self, db, app_label, model=None, **hints):
    """
    Make sure the auth app only appears in the 'vnosdatabase'
    database.
    """
    if app_label == 'vnos1':
        return db == 'vnosdatabase'
    return None

P.S:修复所有问题,将其保留在此处,以供将来第一次尝试制作多个数据库的人参考。

1 个答案:

答案 0 :(得分:1)

您遇到语法错误,因为您缺少逗号:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'testdatabase',
    'USER': 'root',
    'PASSWORD': 'Xma47data',
    'HOST': 'localhost',
    'PORT': '3306',
    },  # <-- HERE
'vnosdatabase': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'vnosdatabase',
    'USER': 'root',
    'PASSWORD': 'Xma47data',
    'HOST': 'localhost',
    'PORT': '3306',
    } 
}

如果我们在没有逗号的情况下运行您的原始文件,我们会收到如下错误:

  File "settings.py", line 10
    'vnosdatabase': {
                 ^
SyntaxError: invalid syntax

要理解此消息,首先要了解SyntaxError的含义。 Python docs并未真正为新手解释清楚,WikiPedia有更好的描述。

所以我们已经知道我们的问题是一些无效的Python代码 - 不是数据库或逻辑的问题,只是Python解释器无法理解的一些代码。一旦你有信心知道并使用你正在编程的语言的语法,遇到SyntaxError几乎总是意味着你在某个地方犯了错误。

我们也知道在哪个文件中,以及(大致)错字的位置。

现在,遗憾的是Python无法说出&#34;您在第9行&#34; 上缺少逗号,因为在第9行之后可能会出现各种可能的有效代码而没有逗号。你可以用}来关闭那里的字典。

相反,Python显示了接下来发现的内容 - 第10行的字符串'vnosdatabase' - Python指向并说“#34;语法无效&#34;”,即这不能出现在

那么,如果您认为代码是正确的,那么您需要从那里向后看,以找到阻止Python解释代码的错误。