2017-10-26 3 views
0

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で何が間違っていますか?

事前にお寄せいただきありがとうございます。

+0

forecastfuture表に余分です。 –

+0

Djangoが作成したデータベース(私の場合はデフォルトデータベース)の要件であると私は理解しています。しかし、それは外部データベースのSQLサーバーを照会するのは本当ですか?ご確認ください。どのように制御できないデータベースをどのように照会しますか? – user2162611

答えて

0

Q2:私はあなたのテーブルがforecastfuture考えると実績が異なる構造のid列を持っているが、主キーはDjangoのモデルでは必要条件であるた、はい

+0

応答いただきありがとうございます。 forecastfutureはdjangoが作成したデータベース(ForecastAppDjango)で作成されたテーブル、Actualsは外部db(Forecasting)からのテーブルです。 – user2162611

関連する問題