我试图访问几个数据库中的一个数据库表。
我首先尝试使用MytableObject.get.using(databasename),但它引发了错误:
django.db.utils.DatabaseError: relation "mytable" does not exist
所以我开始试图找出原因。只要我知道我没有做比平常更多的事情:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': config.get('databaseDefault', 'DATABASE_NAME'), # Or path to database file if using sqlite3.
'USER': config.get('databaseDefault', 'DATABASE_USER'), # Not used with sqlite3.
'PASSWORD': config.get('databaseDefault', 'DATABASE_PASSWORD'), # Not used with sqlite3.
'HOST': config.get('databaseDefault', 'DATABASE_HOST'), # Set to empty string for localhost. Not used with sqlite3.
'PORT': config.get('databaseDefault', 'DATABASE_PORT'), # Set to empty string for default. Not used with sqlite3.
},
'databaseEe': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': config.get('databaseEe', 'DATABASE_NAME'), # Or path to database file if using sqlite3.
'USER': config.get('databaseEe', 'DATABASE_USER'), # Not used with sqlite3.
'PASSWORD': config.get('databaseEe', 'DATABASE_PASSWORD'), # Not used with sqlite3.
'HOST': config.get('databaseEe', 'DATABASE_HOST'), # Set to empty string for localhost. Not used with sqlite3.
'PORT': config.get('databaseEe', 'DATABASE_PORT'), # Set to empty string for default. Not used with sqlite3.
},
'databaseLv': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': config.get('databaseLv', 'DATABASE_NAME'), # Or path to database file if using sqlite3.
'USER': config.get('databaseLv', 'DATABASE_USER'), # Not used with sqlite3.
'PASSWORD': config.get('databaseLv', 'DATABASE_PASSWORD'), # Not used with sqlite3.
'HOST': config.get('databaseLv', 'DATABASE_HOST'), # Set to empty string for localhost. Not used with sqlite3.
'PORT': config.get('databaseLt', 'DATABASE_PORT'), # Set to empty string for default. Not used with sqlite3.
},
'databaseLt': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': config.get('databaseLt', 'DATABASE_NAME'), # Or path to database file if using sqlite3.
'USER': config.get('databaseLt', 'DATABASE_USER'), # Not used with sqlite3.
'PASSWORD': config.get('databaseLt', 'DATABASE_PASSWORD'), # Not used with sqlite3.
'HOST': config.get('databaseLt', 'DATABASE_HOST'), # Set to empty string for localhost. Not used with sqlite3.
'PORT': config.get('databaseLt', 'DATABASE_PORT'), # Set to empty string for default. Not used with sqlite3.
}
}
我创建了一些测试代码:
from django.db import connections
cursor = connections[database].cursor()
cursor.execute("select tablename from pg_tables WHERE tablename !~* 'pg_*'")
print cursor.fetchall()
打印出我的所有桌面名称,其中包括“mytable”。
然后我尝试了这段代码:
from django.db import connections
cursor = connections[database].cursor()
cursor.execute("select * from mytable")
print cursor.fetchall()
再次产生错误:
django.db.utils.DatabaseError: relation "mytable" does not exist
LINE 1: select * from mytable
那么我做错了什么?我可以读取和写入我的默认数据库就好了。我跟踪了这一行:
cursor = connections[database].cursor()
并发现,如果我写实际的连接名而不是数据库,就像那样:
cursor = connections['databaseLv'].cursor()
然后它工作得很好。那我该怎么做呢?
艾伦
答案 0 :(得分:0)
Django需要定义DB Routers来决定使用哪个数据库,也许你的定义不正确。