SQL Server に接続するための Django の設定ガイドライン
元記事:CSDN:sam、ソースはこちら http://blog.csdn.net/samed https://blog.csdn.net/samed/article/details/51012627
1. 前書き
Django はいくつかのデータベースバックエンド (mysql, oracle, sqllite3 (default), postgresql_psycopg2) しか内蔵していないので、 Microsoft SQL Server はネイティブにはサポートされていません。
さて、これまでの試行錯誤と、公式ドキュメントを参考にして、django-pyodbc を使ってようやく解決しました。
まず、私のローカル設定環境。
1.win7、win8
2. Python 2.7
3. django1.7.1
2. ダウンロード
ダウンロードされるコンテンツは以下の通りです。
1. django-mssql 1.6.1 (django-sqlserver 1.7 の依存関係の1つ)
2. pypiwin32 219 (django-sqlserverの依存関係の1つ)
3. django-pytds (django-sqlserverの依存関係の1つ)
5. pyodbc 3.0.10 (複数のバージョンを含みます。ご注意ください)
上記の6つはこの記事に関連するものです。残りの依存関係は、インストールされていない場合は自分でインストールしてください。
このうち、1と4は、プロジェクトで使用するために内容を展開する必要があるため、ダウンロードする必要があります。
注:pyodbc, django-pyodbc, pypiwin32, django-pytds は、実は pypi.python.org に行かなくてもダウンロードでき、pip や easy_install で簡単にインストールできますが、私のテスト環境は某事業者のイントラネットで、プロキシサーバが必要 しかし私のテスト環境が、某事業者のイントラネットで、プロキシサーバとダイアルアップ認証を必要とするので、cmd window は pip などのツールで直接ダウンロードすることができないのです。
pipのインストール方法です。
pip install django-sqlserver django-pytds pyodbc django-pyodbc pypiwin32
3. コンフィグレーション
すべてのインストールが完了したら、プロジェクトの基本的な構成は、3.1、3.2は、単語の[フォーカス]を含むプロジェクトの大前提は、独自の感触のニーズに応じて、他の設定する必要があります。
3.1 TestProjectを作成する。
django-admin startproject django_sqlserver
3.2 TestAppを作成する。
django-admin startapp testapp
3.3 [Focus] settings.pyを修正しました。(django_sqlserver, django_sqlserversettings.py)
# 省略された部分
INSTALLED_APPS = (
# 'django.contrib.admin',
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
# 'django.contrib.messages',
# 'django.contrib.staticfiles',
'testapp',
)
#省略部分
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
'default': {
'ENGINE': 'sqlserver',
'NAME': 'DjangoTest',
'HOST': '127.0.0.1',
'PORT': '1433',
'USER': 'DjangoTest',
'PASSWORD': 'DjangoTest',
'OPTIONS': {
'DRIVER': 'SQL Server Native Client 10.0',
},
}
}
#省略部分
LANGUAGE_CODE = 'zh-CN'
# 省略された部分
3.4 urls.py: (django_sqlserverのurls.py。以下のファイルは内容が少ないので、載せておきます)
from django.conf.urls import patterns, include, url
# from django.contrib import admin
urlpatterns = patterns('',
# Examples:
url(r'^$', 'testapp.views.home'),
url(r'^insertdata/$', 'testapp.views.insertdata'),
# url(r'^blog/', include('blog.urls')),
# url(r'^admin/', include(admin.site.urls)),
)
3.5 views.py。(django_sqlservertestappviews.py)
# -*- coding:utf-8 -*-
from django.shortcuts import render, HttpResponse
from models import Staff
from datetime import datetime
def home(req):
QuerySet = Staff.objects.all()
Info = 'World'
for Item in QuerySet:
print Item.Name
Info = Item.Name
return HttpResponse('Hello %s!' % Info)
def insertdata(req):
try:
s = Staff(LoginID='aa', Name=u'tester', Sex=True, Birthday='2016-03-30', JoinTime=datetime.now())
s.save()
Info = u'inserted successfully'
except:
Info = u'Insert failed'
return HttpResponse(Info)
# -*- coding: utf-8 -*-
from django.db import models
# Create your models here.
class Staff(models.Model):
LoginID = models.CharField(u'LoginName', max_length=20)
Name = models.CharField(u'Name', max_length=10)
Sex = models.BooleanField(default=True)
Birthday = models.CharField(max_length=20, null=True)
JoinTime = models.DateTimeField()
3.6 models.py。(django_sqlservertestappmodels.py)
django_sqlserver
│ db.sqlite3
│ manage.py
│
‘django_sqlserver
│ settings.py
│ urls.py
│ wsgi.py
│ __init__.py
│
‘sqlserver
│ base.py
│ compiler.py
│ creation.py
│ operations.py
│ schema.py
│ __init__.py
│
“sqlserver_ado
│
│ The contents of this folder are omitted
│
└─testapp
│ admin.py
│ models.py
│ tests.py
│ views.py
│ __init__.py
│
└─migrations
0001_initial.py
__init__.py
import pyodbc
connection = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=127.0.0.1;DATABASE=DB_name;UID=User_Name;PWD=PassWord')
curs = connection.execute('select GETDATE()')
curs.fetchone()
3.7 [フォーカス] sqlserverのバックエンド。
3.7.1 django_mssql-1.6.1-py2.py3-none-any.whl django_mssql-1.6.1-py2.py3-none-any.rar にリネームして解凍して sqlserver_ado フォルダを取得します。
3.7.2 django-sqlserver-1.7.tar.gz を展開し、sqlserver フォルダを取得します。
3.7.3 上記2つのフォルダをプロジェクトのルート(django_sqlserver)に入れる。
上記の手順が終わると、プロジェクトファイルは以下のような状態になります。
from django.db import connections
curs = connections['default'].cursor()
curs.execute("select * from some_table")
curs.fetchone()
-
django_sqlserver │ db.sqlite3 │ manage.py │ ├óΓé¼╦£django_sqlserver │ settings.py │ urls.py │ wsgi.py │ __init__.py │ ├óΓé¼╦£sqlserver │ base.py │ compiler.py │ creation.py │ operations.py │ schema.py │ __init__.py │ ├óΓé¼┼ôsqlserver_ado │ │ The contents of this folder are omitted │ └─testapp │ admin.py │ models.py │ tests.py │ views.py │ __init__.py │ └─migrations 0001_initial.py __init__.py
4. テストが設定されたら、pyodbc と django-pyodbc のテストは、別途
4.1. pyodbc による sql server データベースへの接続テスト。
-
import pyodbc connection = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=127.0.0.1;DATABASE=DB_name;UID=User_Name;PWD=PassWord') curs = connection.execute('select GETDATE()') curs.fetchone()
通常、1行のデータが出力されますが、出力されない場合は、このデータベースユーザーの権限を確認してください。
4.2. django-pyodbc による sql server データベースへの接続テスト。
プロジェクトのルートで manage.py シェルを実行し、dp コマンドラインモードにします。
-
from django.db import connections curs = connections['default'].cursor() curs.execute("select * from some_table") curs.fetchone()
結果は、4.1 と同じになるはずです。
5 プロジェクトの実行
エラーなく4.2まで行けば、理論上は問題なく動作するはずです。
5.1 まず、テーブルのビルド文を作成します。
manage.py makemigrations
5.2 データベースの同期を実行する。
manage.py syncdb
完成すると、データベースには django_migrations と testapp_staff の2つのテーブルがあるはずです。
5.3 テストサーバーが稼働しています。
manage.py runserver
5.3.1 最初にサイトの可用性をテストする
ブラウザで開く: http://localhost:8000/
サイトが正常に動作しており、データベースのテーブル内にまだデータがないことを示します。
5.3.2 次に、データの挿入をテストする
ブラウザで開く: http://localhost:8000/insertdata /
データが正しく挿入できることを示す。
5.3.3 データベースデータ読み込みのテスト
再びホームページを開くと、次のようなことがわかります。
データベースの読み込みに成功しました。
6. よくあるエラーと解決策
6.1
エラーです。('IM002', '[IM002] [Microsoft][ODBC \xc7\xfd\xb6\xaf\xb3\xcc\xd0\xf2\xb9\xdc\xc0\xed\xc6\xf7] \xce\xb4\xb7\xa2\xcf\xd6\xca\xfd\ xbe\xdd\xd4\xb4\xc3\xfb\xb3\xc6\xb2\xa2\xc7\xd2\xce\xb4\xd6\xb8\xb6\xa8\xc4\xac\xc8\xcf\xc7\xfd\xb6\xaf\xb3\xcc\xd0\xf2 (0) ( SQLDriverConnect)')
翻訳するには
エラー: ('IM002', '[Microsoft][ODBC Driver Manager] データソース名が見つからず、デフォルトドライバが指定されていない (0) (SQLDriverConnect)')
解析と解決
こちらは、データベースのIP/ポート/データベース名が間違って書かれている可能性があるので、確認してみてください。デフォルトのポート1433を使う予定なら、それも追加してエラーを回避してください。
6.2
BaseDatabaseWrapper のサブクラスは、 _start_transaction_under_autocommit() メソッドを必要とするかもしれません。
解析する。
バックエンドが正しく読み取れないことが原因です。
解決方法
1. 3.7 に従って sqlserver がプロジェクトルートに置かれているかどうかを確認し、置かれていない場合は 3.7 をやり直します。
2. django-sqlserver がインストールされていることを確認し、インストールされていない場合はインストールします。
3. 設定の DATABASE 設定が ENGINE for sqlserver であるかどうかを確認し、なければ sqlserver に設定します (テスト済み、ここに django_pyodbc を記入しても動作します)。
6.3
例外です。ado と pytds の両方が利用できません。pytds をインストールするには、pip install python-tds を実行してください。
ImportError: sqlserver.compiler という名前のモジュールがありません。
解析する。
これは依存関係である django-sqlserver がインストールされていないことが原因です
解決方法
django-pytdsをインストールし、テストします。
cmd shell> python
>>> インポート pytds
6.4
ImportError: pythoncom という名前のモジュールがありません
解析してください。
これは、django-sqlserver の依存関係がインストールされていないために起こります。
解決方法
pypiwin32をインストールし、テストしてください。
cmd shell> python
>>> インポート pythoncom
6.5
django.core.exceptions.ImproperlyConfigured: 'sqlserver' は利用可能なデータベースバックエンドではあり ませんでした。
django.db.backends.XXX' を使ってみてください。XXX は次のうちの1つです。
u'mysql'、u'oracle'、u'postgresql_psycopg2'、u'sqite3'
エラーが発生しました。baseという名前のモジュールはありません
解析してください。
バックエンドが正しく読み取れないことが原因です。
解決方法
6.2項参照
-------------------------------------------------
参考
1. Linux で Django のデータベースバックエンドとして MSSQL Server を使用する
関連
-
Python Decorator 練習問題
-
[解決済み】TypeError: method()は1つの位置引数を取るが、2つが与えられている
-
[解決済み] 終了コード -1073741515 (0xC0000135)でプロセス終了
-
[解決済み] ValueError: xとyは同じサイズでなければならない
-
[解決済み] Pythonでコンソール出力を抑制する方法は?
-
[解決済み] インテル® MKL FATAL ERROR。libmkl_avx2.so または libmkl_def.so をロードできません。
-
[解決済み] TimedRotatingFileHandler ファイル名を変更しますか?
-
[解決済み] インデックスを持たないデータフレーム列の最後の値の取得
-
Scikit-Learnのエラーメッセージ: fit_transform()は2つの位置引数を取りますが、3つ与えられました。
-
ValueError: 解凍する値が多すぎる (期待値 2)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PicgoのイメージベッドツールをPythonで実装する
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】一連のリストのデカルト積を取得する?
-
[解決済み] OpenCV houghLinesP パラメータ
-
[解決済み] Pythonでバックスラッシュ文字を空文字列に置換する方法
-
[解決済み] Pythonインタプリタエラー、xは引数を取らない(1つ指定)
-
[解決済み] crontabスタイルの行のパース
-
[解決済み] Python Tkinterのルートウィンドウを消すにはどうしたらいいですか?
-
花火、桜、薔薇を美しく実装するPython
-
非対応Pickleプロトコル