Python
SQLServer
VisualStudio2013
pyodbc

db準備・dbからデータを抜く

More than 1 year has passed since last update.

参考ページ

・データベース ユーザーの作成
・Pythonで色々なデータベースを操作する
・SQLServer認証で接続できない場合はサーバー認証モードをチェックする
・Visual Studio 2013でクライアントサーバー型データベースアプリケーションをあっというまに作る

SQLServer

データベースを作成する

VisualStudioは別件ですでにインストールしてあったので省略。
特に何も考えてない一般的なインストールだと思うけど、「表示(V)」→「SQL Server Object Explorer」で、左端の「SQL Server」が表示されていない場合はコメントしてください。VisualStudioインストールしなおして点検して、差分を追記します。
1.PNG


「(localdb)\MSSQLLocalDB...」と書かれているところをクリックすると「Databases」を右クリック、「Add New Database」をクリックすると、新しいデータベース名を求められるので、今回は「db」と入力して「OK」。これで「db」のマークが追加される(※MS Accessで言うところの、「accdb」ファイルを作っただけの(テーブルが一つもない)状態)
1.PNG

テーブルを作成する

「データベース」を作ったのと同じ容量で「db」の下の「Tables」で右クリックして「Add New Table」すると、テーブルを作ることが出来る。
1.PNG


今回はこんなテーブル構成にした(アカマルに下のSQLをコピーすると良い)
image

CREATE TABLE [dbo].[table] (
    [Date]  DATETIME NOT NULL,
    [Value] NCHAR (10) NULL,
    CONSTRAINT [PK_table] PRIMARY KEY CLUSTERED ([Date] ASC)
);

ユーザーを追加する

「ユーザーとパスワード」を用意しないと Python など「いわゆるソト」からのアクセスができない。
「Security」-「Logins」で右クリックして「Add New Login...」をクリック
1.PNG


あっ!
最高に鬼畜だなこのユーザー追加。右クリックからの「Execute」とか、全然わかんなかったぜ...
ユーザー名「python」
パスワード「python」(Nがよくわからんけどシングルクォーテーションの中身だけ変えた)
image


「Security」のところで右クリック、「最新の情報に更新」をすると「python」ユーザーが増えている。手動で「更新」しないと出てこない。「FFFFFFFFFFF」と「sasa」は失敗してできたユーザー...。消し方わからん...。
image

テーブルにダミーデータを突っ込む

「db」で右クリック、「New Query」をクリック。
image

INSERT INTO [table]([date],[value]) values(GETDATE() ,'1')

(「date」とか「table」はどうやら予約語?のようなので違う名前をつけたほうがよさそう。ただしこういうカッコ「 [ 」をつけると、それを無視できる)
SQLが終わったら左上の「再生マーク(アカマル)」を押す。
「(1 row(s) affected)」と出てきたら成功。
image

「dbo.table」を右クリック、「View Data」をクリックすると、
image

データがしっかり入ってました。
image

Pythonのインストール

標準的なインストール(win7 64bit)
http://www.python.jp/Zope/Zope/download/pythoncore
image

PyODBCのインストール

Python用のODBC(pyodbc)も標準的なインストール
https://code.google.com/p/pyodbc/downloads/list
image

VisualStudioでPythonの新規プロジェクトを作成

image

ソース

import pyodbc

cnn = pyodbc.connect(r'DRIVER={SQL Server};SERVER=localhost\SQLExpress;DATABASE=db;UID=python;PWD=python;')

cur = cnn.cursor()

cur.execute("SELECT * FROM [table]")
rows = cur.fetchall()

for row in rows:
    print(row[0], row[1])

cur.close()
cnn.close()

※うんともすんともlocalhostのSQLServerに繋がらない

このSQLServerは、2015年4月の「AzureとFlashAirを使うハッカソン」のときに入れたものなんだ。Azureでやったときはブラウザ上でカンタンにデータベースを作って接続できたのに
localhostでやるほうが情報が少なくて難しいなぁ

SQLServerがAzure用のエディション?らしい...

わかった。そもそも「スタート」から「Management Studio」が無かった時点で怪しまないといけなかったな。なんせ、管理画面(?)を開くと
image

サブスクリプションが~とかいう、こんな画面が開く...(どうりでlocalhostにつながらないわけだ?)
image

SQLServerExpressのインストール

Microsoft SQLServer Express ダウンロードページ
SQL Server 2014 Express のインストール

ダウンロードしたもの

デスクトップには

「JPN\x64\SQLEXPRWT_x64_JPN.exe」(With Tool)を選びました。

FlashAirには(軽量重視)

「JPN\x64\SqlLocalDB.msi」を選びました。

SQLServerのエディションについて

2014 Express には、以下の5つのエディションがある。

◎ LocalDB : Express の簡易版(MS Access のMDBのような感覚)
◎ Express with Tools : Express + Management Studio
✕ Express : SQL Server のデーターベースエンジンのみ。
✕ Express with Advanced Services : Express + フルテキスト検索 + Reporting Services + Management Studio。
✕ Management Studio Express : Management Studio のみ。

Management Studioが出てきた!

ログイン時の「サーバー名(S)」は「localhost\SQLExpress」です
(インストール時に「インスタンスの構成」をデフォルトでセットアップした場合)
image

image

image

image

(※「データベースを作成する」と「テーブルを作成する」と「テーブルにダミーデータを突っ込む」は上に書いてありますのでそちらを)やば、日本語で出来るって幸せ...。
「ユーザーを追加する」も参照して Python で増やして、っと。おっと、「ユーザーマッピング」の設定で、
・「db」にチェックを入れ、ユーザー「python」に「db」へのアクセスを許可し、
・「db_datareader」「db_datawriter」にチェックを入れるんだ(読み書き)

参考(教えて!goo):SQL server認証に必要な最低限のロールを教えてください

image

image

動作確認

実行!
image

ようやくゴール。感動的。今日は最高の眠りが約束された。
image

つぎは?

Webのフロントエンドに「データ取得」ボタンを作って「PythonApplication1.py」を「叩く」。
Adobe Dreamweaver CC 2015 の出番かな?