[英]Unable to fetch data by checking if one list is equal to other list in django
[英]How to use one db to run the django service and other to fetch data
我有一个现有的应用程序数据库,我的网站仅应根据用户输入从中获取数据。 在settings.py
文件中添加了数据库详细信息,我尝试了python manage.py integratedb
并获得了所有300多个表到我的models.py
文件中。 我从来没有做过python manage.py runserver
它抛出一百万个错误。 现在我找到了解决方法,但是我需要您对此发表意见。
我将默认服务器添加到settings.py
并使用它可以运行服务器。 settings.py
看起来像这样。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'mydatabase',
},
'user': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME' : 'test',
'USER' : 'testuser',
'PASSWORD': 'readonly',
'HOST' : '10.20.30.40',
'PORT' : '5446',
}
}
现在我可以访问user db
以从表单中获取数据了吗? 例如
views.py
看起来像这样
from django.shortcuts import render_to_response
from .models import TestCases
from django.shortcuts import HttpResponse
from django.http import JsonResponse
from django.forms.models import model_to_dict
from django.views.decorators.csrf import csrf_exempt
# Create your views here.
@csrf_exempt
def index(request):
posts = TestCases.objects.all()[:10]
return render_to_response('index.html',{'posts':posts})
其中, TestCases
是来自models.py
文件的类名。
现在,当我单击按钮以检索数据时,我得到“没有这样的表:test_cases”
models.py looks like
class TestCases(models.Model):
id = models.BigIntegerField(primary_key=True)
clientid = models.ForeignKey(Clients, db_column='clientid')
projectid = models.ForeignKey(Projects, db_column='projectid')
class Meta:
managed = False
db_table = 'test_cases'
我从用户输入中获取数据时做错了什么。 请帮忙。
.using()
方法 我想Django将使用默认数据库。
尝试这个:
@csrf_exempt
def index(request):
posts = TestCases.objects.using('user').all()[:10]
return render_to_response('index.html',{'posts':posts})
将using
设置为queryset时,可以指定django将要查询的数据库。
Django文档中的更多信息
您可以将其手动添加到所有查询中,也可以为对象创建自定义管理器,并强制其对对象使用特定的数据库。
例如:
# this will override the default queryset for objects that use this Manager
class UserDatabaseManager(models.Manager):
def get_queryset(self):
return super().get_queryset().using('user')
class MyModel(models.Models):
objects = UserDatabaseManager()
然后,当您使用MyModel
,您可以像MyModel
进行查询,并且Django将仅对具有objects = UserDatabaseManager()
模型使用user
db作为默认值。
请记住,这只是Manager的简单使用,您可以拥有多个Manager并做很多很酷的事情。
首先,您需要执行以下操作:
python manage.py inspectdb > models.py
将您的模型存储到models.py
默认情况下,inspectdb创建非托管模型。 也就是说,模型的Meta类中的managed = False告诉Django不要管理每个表的创建,修改和删除,如果您希望允许Django管理表的生命周期,则需要将上面的Managed选项更改为True (或直接删除它,因为True是其默认值)。
接下来,运行migrate命令以安装任何其他需要的数据库
python manage.py migrate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.