web-dev-qa-db-ja.com

ストアドプロシージャの呼び出しpython

情報をプルしたりMsSQLサーバーを更新したりするスクリプトを書いていますが、1つのストアドプロシージャ呼び出しを機能させることはできますが、updateDB関数で2番目の呼び出しを機能させることはできません。これが私のコードですスクリプトは正常に実行されますエラーコードはありません

import pyodbc 
import json
import argparse
import cgi, cgitb


#GLOBALS
    BUILDCODE = " "
    deptCODE = 0
    bldgCODE = " "
def getCodes(conn, building, department):
    #just for testing
    departmentt = 'COMPUTER SCIENCE'
    buildingt = 'PEARCE HALL'


    #geting the building code from db
    cursorBuild = conn.cursor()
    cursorBuild.execute("select * from dbo.building where name = '%s'" % buildingt)
    bldgRow = cursorBuild.fetchall() 
    cursorBuild.close()
    bldgCode = bldgRow.pop(0)

    global bldgCODE
    bldgCODE = bldgCode.code


    #getting the dept code
    cursorDept = conn.cursor()
    cursorDept.execute("execute dbo.GetCode_ByDepartment @department = '%s'" % departmentt)
    deptRow = cursorDept.fetchall()
    cursorDept.close()
    deptCode = deptRow.pop(0)

    global deptCODE
    deptCODE = deptCode.code
    print type(deptCODE)
    print deptCODE

    #returning the values
    return (bldgCode, deptCode)

    def updateDB(conn, tag, room, updater):
    #updating the database
    updateCursor = conn.cursor()

    print deptCODE
    print bldgCODE
        #this will pass params just has them hard codded for testing
    conn.execute("exec dbo.UpdateCheck_In @room = '400', @building = 'PE', @department = 307, @global_id = 'bacon', @tag = '120420'")


if __name__ == "__main__":
    #connectin to the db with SQL Authentification
    conn = pyodbc.connect(driver = '{SQL Server}', server = '(local)',
        database = 'Inventory', uid = 'sa', pwd = 'p@$$w0rd123')

#checking to see if you connected to the db or not 
    if (conn == False):
        print "Error, did not connect to the database"
    else:
        #NEEDS THIS cgitb.enable
        cgitb.enable()
        # Create instance of FieldStorage   
        form = cgi.FieldStorage()

        #get the data from the url that called it 
        tag = form.getvalue('tagnum')
        building = form.getvalue('build')
        roomNum = form.getvalue('room')
        department = form.getvalue('dept')
        updater = form.getvalue('update')

        #check to see if item is in the db 
        itemIsThere = conn.cursor()
        itemIsThere.execute("select * from dbo.check_in where tag = '120420';")
        print itemIsThere
        itemIsThere.close()
        #if the item in in the inventory 
        if (itemIsThere != None):
                #getting the codes
            getCodes(conn, building, department)
            #calling the update function
            updateDB(conn, tag, roomNum, updater)
        else :
                pass

    conn.close()
8
user1229126

みんなの答えを見つけました、それは私がMsSQL2008の新しいドライバーの代わりにレガシードライバーを指定したからですここにコードがあります

    conn = pyodbc.connect(driver = '{SQL Server Native Client 10.0}', server = '(local)',            database = 'Inventory', uid = 'sa', pwd = 'p@$$w0rd123',autocommit=True)  
2
user1229126

更新手順の実行後に変更をコミットします。

_...
#this will pass params just has them hard coded for testing
conn.execute("exec dbo.UpdateCheck_In @room = '400', @building = 'PE', @department = 307, @global_id = 'bacon', @tag = '120420'")
conn.commit()
_

pyodbc.connect()autocommit ではデフォルトで無効になっています

8
Bryan