我有一个现有的应用程序数据库,我的网站只能根据用户输入获取数据。在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'
从用户输入中获取数据我做错了什么。请帮忙。
答案 0 :(得分:2)
.using()
方法我想Django会选择默认数据库。
试试这个:
@csrf_exempt
def index(request):
posts = TestCases.objects.using('user').all()[:10]
return render_to_response('index.html',{'posts':posts})
将using
设置为查询集时,可以指定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
时,您可以像往常一样进行查询,Django将user
db仅用于具有objects = UserDatabaseManager()
的模型的默认值。
请记住,这只是一个简单的使用管理器,您可以拥有多个经理并做很多很酷的事情。
答案 1 :(得分:0)
首先你需要做的是:
python manage.py inspectdb > models.py
将模型存储到models.py
默认情况下,inspectdb会创建非托管模型。也就是说,在模型的Meta类中,managed = False告诉Django不要管理每个表的创建,修改和删除,如果你想让Django管理表的生命周期,你需要将上面的托管选项更改为True (或者只是删除它,因为True是默认值)。
接下来,运行migrate命令以安装任何额外需要的数据库
python manage.py migrate