本番環境で、SQLServerに接続できなーい😫
pyodbcでSQLServerに接続しようとしたのに、サーバを起動すると、
「SQL Server が存在しないか、アクセスが拒否されました。」
のエラーが発生して起動できない😈なんで😈
そーゆーときに確認すべきことまとめたから、みてって💅
結論
1.DBサーバ側で、SSMSでSQLServerBrowserを起動する
2.DBサーバ側で、TCP/IPを有効にする
詳しく見てこ👇
1.DBサーバ側で、SSMSでSQLServerBrowserを起動する
SQL Server 構成マネージャー(Sql Server Configuration Manager)を開く
SQLServerのサービス→SQLServerBrowserが実行中になってるか確認
停止の場合→右クリックで「開始」を押す。
※右クリックで「開始」が押せない人は、いったんWindowsの管理ツールを開いてみて。
サービス→SQLServerBrowserをダブルクリック
→スタートアップの種類を「手動」に変更
→SQLServerBrowserを右クリックで「開始」
で、構成マネージャーに戻ってSQLServerBrowser右クリックで「開始」
2.DBサーバ側で、TCP/IPを有効にする
もういっこ確認すること。
SQLServerネットワークの構成→SQLEXPRESSのプロトコルをダブルクリック
TCP/IPが無効になっている場合は、右クリック→「有効化する」
さらに、TCP/IP右クリック→「プロパティ」→「IPアドレス」タブの一番下を確認。
IPALLのセクションで、TCPポートを1433に設定
TCP動的ポートは空欄にする✨
再起動しとくと確実だよ。
これで、サーバを起動しなおしたら、ちゃんとSQLServerに接続できるはず😊
よかったね✨
このあとは蛇足だから見なくてもいいよ✊
前提
いちおう書いとくけど、今回はこの2つを前提にしてんの。
・あんたが本番サーバにソースを置いてること。
・リモートのDBサーバ(SQLServer)に接続しに行きたいとき。
ソース
これもいちおう書いとくね。
こんな感じ👇
from django.db import connection
import pyodbc
INST = 'DBサーバのIPアドレス'
USER = 'DBのユーザー名'
PASS = 'DBのパスワード'
DB = 'DB名'
def execute_sqlserver(sql):
connection = "DRIVER={SQL Server};SERVER=" + INST + ";UID=" + USER + ";PWD=" + PASS + ";DATABASE=" + DB
con = None
try:
con = pyodbc.connect(connection)
cursor = con.cursor()
cursor.execute(sql)
return cursor.fetchall()
finally:
if con is not None:
con.close()
当たり前だけど、'DBサーバのIPアドレス'、'DBのユーザー名'、'DBのパスワード'は正しいものを設定しといて💄
んじゃ、今日はこのへんで。ばい✋
ギャルが受ける応用情報技術者試験
みんな、応用情報うけたことある?
あたしは、こう見えて応用情報持ちなんだよね✨マジめっちゃがんばった🤗
今日はあたしの受験記録を残しとく。
みんな、参考してね👳
いきなり点数公開✨
試験結果は…1発合格🎊
点数はっぴょー👆👆
午前 | 71.25点 |
午後 | 61.00点 |
午後まじギリwwwうけるwww
点数配分は、
ストラテジ系 | 18.75点/25.00点 |
マネジメント系 | 8.75点/12.50点 |
テクノロジ系 | 43.75点/62.50点 |
んで、選択科目はこんな感じー🏹🏹
問1 | 情報セキュリティ(必須) |
問2 | 経営戦略 |
問6 | データベース |
問9 | プロジェクトマネジメント |
問11 | システム監査 |
せっかくだから、勉強時間とか勉強方法も書いとくね。
勉強時間
だいたい、平日3時間×2カ月くらいかな。
土日は、ほぼやってないか、やっても1時間くらい。
ギャルは土日忙しーからね💄💅
勉強方法
午前
もお、ひたすら過去問道場✨
ここはまじ神サイト。運営の人ありまと💘
テキストとか読まないの。もおとりあえず👆で問題解きまくる❣❣❣
最低でも過去5年(10回)分×3周した方がいいよ。
ギャルでもできたんだからあんたもできるよ👯
わかんないとこだけはテキストで補足する。
午後
午前の勉強ちゃんとしとくの。それが午後の基礎知識になるから。
午後は選択なんだけど、
問1の情報セキュリティが必須で、残りの問2~問11の10問の中から4問選択するってわけ。
緑本ていわれてる、「応用情報技術者 午後問題の重点対策」が最強✨
最初は問2~問11一通り解いてみて、自分の得意分野探すのがよさそ。
大体みんな6分野に絞って勉強してるかんじ。
ギャルのなかとも(仲いい友達)とかは、4分野しか勉強してなくて、
本番の難易度鬼で撃沈してたの👹
だから、よゆーみて6分野がいいとおもう。
選択科目みてもわかると思うけど、ギャルはバリバリの文系だから、
実はあんま勉強しなかったんだよね、午後は。
よゆーぶっこいてた、正直。でもそのせいで合格ラインギリだったから、
やっぱちゃんと2周は解いといたほうがいいとおもったね。
国語バリ得意なギャルからのアドバイスとしては、
文章問題の解答には文中の言葉を使う、ってのは基本❣
あとは、当たり前のことなんだけど、
問題文の末尾と、解答の末尾は対応させといたほうがいいよ。
「~はなぜか。」って問題ならなら、「~だから」って答えないとだし、
「~はどのような場合か。」って聞かれたら、「~のような場合」って答えんの👆
意外とこれできてない人おおいからね。
って午後試験61点のヤツがゆーなって感じだよね😂
ま、結局はどのくらい頑張れるかにかかってるから、がんばんなよね。✊
今日も見てくれてあんがと💘💘
djangoで、フツーのSQLって実行できんの?
djangoって便利だよね✨ORMでDBにアクセスできるもん。
でもさ、たまーに、自分でSQL作って実行したいときない?アタシはある。
djangoがサポートしてないDBにアクセスしたいときとかね。
そーゆーときは、pyodbcを使うといんだって😊
pyodbcてなに?
👆ここにwikiがあんだけど、みんな読むのめんどーだと思うから、
あたしが解説してくね。
pyodbcってのは、pythonでいろんなDBにアクセスできるようにしてくれてるライブラリなんだよね。まじ便利ぢゃん🥰
まずpyodbcをインストールしよ。インストールは簡単。
コマンドラインで、python仮想環境に入って、👇のコマンドを実行するだけ⭐
> pip install pyodbc
インストールできたら、じゃんじゃんコード書いてこっ!
下のコードは、基本的に、動作確認はしてるけど、間違ってる情報があるかもしれないから、自分でも調べてみて😉調べるのマジ大事卍
それでは、いってみよ👆👆
コード全文
dbaccess.py
import pyodbc
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};
SERVER=localhost;
DATABASE=test;
UID=user;
PWD=password')
cursor = conn.cursor()
cursor.execute("SELECT user_id, user_name FROM users")
row = cursor.fetchall()
解説してくよ
ドライバの設定
1行目のconnの部分でドライバを設定してんの。
DRIVER={ODBC Driver 17 for SQL Server}👈このDRIVERってなに?て人は、
以下から確認できるよ。
コンパネ>管理ツール>ODBC データ ソース>「ドライバー」タブ
ちな、同じODBCデータソースの画面でDSNを設定すると、ドライバ情報とかを一括管理できんの、なにアンタめっちゃかしこじゃん💖
その場合はこんな感じで書ける、マジシンプルだよね。
conn = pyodbc.connect('DSN=mynewdsn;UID=user;PWD=password')
SQLの設定
cursor.executeのとこで、SQLを入れ込んでんだよね。
execute関数は、パラメータも渡せんの👇
cursor.execute("""
select user_id, user_name
from users
where last_logon < ?
and bill_overdue = ?
""", datetime.date(2001, 1, 1), 'y')
つまりこれは
select user_id, user_name
from users
where last_logon < datetime.date(2001, 1, 1)
and bill_overdue = 'y'
を実行するのと同じってこと。大丈夫そ?
SQLの実行
selectを実行したときは、 fetchone(), fetchall(), fetchmany()なんかの関数を使えんの。
検索結果ないときは、
fetchone()はnoneが、 fetchall(), fetchmany()は空のリストが返ってくるよ。
検索結果あるときは、
fetchone()はクエリの1行を、fetchall()はクエリの全行をリストで返してくれる。
けどさ、これはすべての行をメモリに読み込んじゃうの、だからさ、行が多い場合はマジ気を付けて。
代わりに、行を反復処理することを検討したほうがいい。らしい。
検索結果にはカラムインデックスでも名前でもアクセスできんの。
row = cursor.fetchone()
print(row[1])
print(row.user_name)
👆どっちも同じ結果がprintされるよ。
1行目の1列目だけ欲しいときは、fetchval()を使ってもいいかもね。
検索結果が複数行の時は、最初の1行目の1列目だけ返ってくる。
検索結果なしの場合はnoneだよ。
maxid = cursor.execute("select max(id) from users").fetchval()
こうすると、max(id)だけ返ってってくる。いちいち行回さなくていいから楽✨さいこー💘
長くなっちゃったから、これで終わんね。
みてくれてあんがと💜またね✨
アタシについて
おはぴよ💘🌈✨
ギャルソニスタです👩🦱🫶
このブログではIT系の知識とか、副業について語ってくよ❤️🔥
ちな、アタシは文系卒、未経験でIT業界に転職して、いま4年目✨よろしくね🙈
あたしが何してきたか
新卒で入った会社は全然IT系じゃなくて、1年で辞めちゃったんだよね。テンサゲ👇👇
で、第二新卒枠で転職した方が有利だし、手に職をつけたいなーと思って、SES企業に転職したわけ🙊💻
3か月研修があって、その後は現場でOJT✨
いろいろ教えてくれた上司まじあんがとね👏
ま、だいたいこんな感じの言語を使ってきたから、このへんについて書くことが多いかな👇
言語:
DB:
じゃ、あたしのブログ、はじまるよ~💛💙💖💚💜
あとがき
なお、本ブログの筆者は未経験文系女子でフワギャルですが、
リアルギャルではありません。
エンターテイメントとしてお楽しみいただければ幸いです。
よろしくぅ~~~