我在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:修复所有问题,将其保留在此处,以供将来第一次尝试制作多个数据库的人参考。
答案 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解释代码的错误。