pythonのsqlserverに対する基本的な操作
基本手順: pymssqlライブラリ をインポート接続conn共通パラメータの確立:host:ホストuser:ユーザー名password:パスワードdatabase:データベースcharset:文字セット,‘utf 8’as_dict:クエリー結果リストの要素が辞書で返されるかどうか(デフォルトFalse、リストの要素がメタグループ)autocommit:自動コミットトランザクション(デフォルトFalse、commit()を使用してトランザクションをコミットする必要がある) connを介してカーソルcursorを開き(Noneの開きに失敗したことを返す)、sql文 を実行する.クエリー結果を取得するcursorを使用します.fetchall()は取得されていないすべてのレコードを取得します.cursor.Fetchone()は最初のレコードを取得します.cursor.fetchmany(i)取得前iレコード insert,update,delete操作後、conn.commit()コミットトランザクションが必要で、保存操作 操作終了、conn.close()データベース接続を閉じる
with文を使用してclose()操作を行わずに操作を簡略化します.
>>> import pymssql
#
>>> conn=pymssql.connect(host='HOST',user='USER',password='PASSWORD',database='test',charset='utf8')
#
>>> cur=conn.cursor()
# sql
>>> cur.execute('select * from test1')
#
>>> rs=cur.fetchone()
>>> print(rs)
(1, 'A ')
#
>>> rs=cur.fetchmany(2)
>>> print(rs)
[(2, 'B '), (3, 'C ')]
# ,
>>> rs=cur.fetchall()
# list , tuple
>>> print(rs)
[(4, 'D '), (5, 'E '), (6, 'F '), (7, 'G '), (8, 'H '), (9, 'I '), (10, 'J ')]
# fetchall() , fetchone() fetchmany() rowcount -1
# rowcount fetchall() , fetchone() fetchmany() ,
>>> cur.rowcount
10
# as_dict=True, list dict
>>> conn=pymssql.connect(host='HOST',user='USER',password='PASSWORD',database='test',charset='utf8',as_dict=True)
>>> print(rs)
[{'id': 1, 'value': 'A '}, {'id': 2, 'value': 'B '}, {'id': 3, 'value': 'C '}, {'id': 4, 'value': 'D '}, {'id': 5, 'value': 'E '}, {'id': 6, 'value': 'F '}, {'id': 7, 'value': 'G '}, {'id': 8, 'value': 'H '}, {'id': 9, 'value': 'I '}, {'id': 10, 'value': 'J '}]
# insert,update,delete
>>> cur.execute("insert into test1 (value) values ('k')")
# lastrowid, id ,id
>>> int(cur.lastrowid)
11
#
>>> cur.rowcount
1
# , commit
>>> conn.rollback()
# insert,update,delete , commit() ,
>>> conn.commit()
# , , , !
>>> cur.execute('select * from test1 where value=%s',('D',))
>>> rs=cur.fetchall()
>>> print(rs)
[(4, 'D ')]
#
>>> cursor.callproc('SP_XXXXX')
#
>>> cursor.callproc('SP_XXXXX',('ABC',))
# output , , msg
>>> msg=cursor.callproc('SP_XXXXX',('ABC',pymssql.output(str)))
>>> output=msg[1]
# , sql
# SP_test1 :input @arg, test1 ,output ,returnvalue 999
# sql 3 , , output, returnvalue
>>> sql="DECLARE @return_value int,@rows int;EXEC @return_value = [dbo].[SP_test1] @arg = N'b',@rows = @rows OUTPUT;SELECT @rows as N'@rows';SELECT 'Return Value' = @return_value"
>>> rs=cur.fetchall()
>>> rs
[(1, 'A '), (2, 'B '), (3, 'C '), (4, 'D '), (5, 'E '), (6, 'F '), (7, 'G '), (8, 'H '), (9, 'I '), (10, 'J '), (11, 'k ')]
#
>>> cur.nextset()
>>> rs=cur.fetchall()
>>> rs
[(11,)]
#
>>> cur.nextset()
>>> rs=cur.fetchall()
>>> rs
[(999,)]
>>> cur.close()
>>> conn.close()
with文を使用してclose()操作を行わずに操作を簡略化します.
>>> with pymssql.connect(host='HOST',user='USER',password='PASSWORD',database='test',charset='utf8') as conn:
with conn.cursor() as cur:
cur.execute('select * from test1')
rs=cur.fetchall()
for row in rs:
print(row[0],row[1])
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J
11 k