Djangoはかなり新しくなっています。私はDjangoアプリケーションを使用してSQLサーバーからデータを照会しようとしています。デフォルトのDjangoデータベースに接続してそこからデータを取得できますが、Djangoは既存のデータベースにクエリを実行しようとするとエラーをスローし続けます。 (ここでは書式設定でインデントミスについて謝罪が、それは私のスクリプトでOKです)Djangoを使用してSQL Serverからデータを照会/取得する
views.pyは以下のエラーを示しています
[Microsoft]の[SQL Serverネイティブクライアント11.0] [SQL Serverの]無効列名 'id'。 (207)
私はrouters.pyとmodels.pyとsettings.pyをマニュアルで設定しました。
routers.py
class App1Router(object): #pardon my poor indentations here while posting
def db_for_read(self, model, **hints):
if model._meta.app_label == 'ForecastApp':
return 'Forecasting'
return 'default'
def db_for_write(self, model, **hints):
if model._meta.app_label == 'ForecastApp':
return 'Forecasting'
return 'default'
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'ForecastApp' and obj2._meta.app_label == 'ForecastApp':
return True
# Allow if neither is chinook app
elif 'ForecastApp' not in [obj1._meta.app_label, obj2._meta.app_label]:
return True
return False
def allow_syncdb(self, db, model):
if db == 'Forecasting' or model._meta.app_label == "ForecastApp":
return False # we're not using syncdb on our legacy database
else: # but all other models/databases are fine
return True
models.py
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'ForecastAppDjango',
'USER': '',
'PASSWORD': '',
'HOST': 'abc.com\\sql',
'PORT': '1433',
'OPTIONS': {
'host_is_server': True,
'driver' : 'SQL Server Native Client 11.0',
'trusted_connection':'yes',
},
},
'Forecasting': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'Forecasting',
'USER': '',
'PASSWORD': '',
'HOST': 'abc.com\\sqlt',.
'PORT': '1433',
'OPTIONS': {
'host_is_server': True,
'driver' : 'SQL Server Native Client 11.0',
'trusted_connection':'yes',
},
}
}
DATABASE_ROUTERS = ['ForecastApp.routers.App1Router']
は、これまでのところ、私がしようとしたVEの
class Actuals(models.Model):
date = models.DateTimeField(db_column='Date', blank=True, null=True)
values = models.FloatField(db_column='Values', blank=True, null=True)
region = models.CharField(db_column='Region', max_length=50, blank=True, null=True)
metric = models.CharField(db_column='Metric', max_length=50, blank=True, null=True)
class Meta:
managed = False
db_table = 'actuals'
class migrations(models.Model):
app =models.CharField(max_length=255)
name =models.CharField(max_length=255)
applied = models.DateTimeField()
class forecastfuture(models.Model):
caseId = models.IntegerField(null=False)
date = models.DateField(null=False)
forecast=models.FloatField(null=False)
metric = models.CharField(max_length=255,null=False)
region = models.CharField(max_length=255,null=False)
settings.py:manage.py makemigrationsと成功したコマンドを移行します。
実績表は次のとおりです。
| Date | Values | Region | Metric|
|2012-01-01 00:00:00.000 | 1000 | Region1 | Demand |
manage.py inspectdb --database "予測" もOKでした。
Q1:外部DB予測にはプライマリキーがありません。これは必須条件ですか? Q2:views.pyやmodels.pyで何が間違っていますか?
事前にお寄せいただきありがとうございます。
forecastfuture表に余分です。 –
Djangoが作成したデータベース(私の場合はデフォルトデータベース)の要件であると私は理解しています。しかし、それは外部データベースのSQLサーバーを照会するのは本当ですか?ご確認ください。どのように制御できないデータベースをどのように照会しますか? – user2162611