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()データベース接続を閉じる
  • >>> 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