2012-02-23 25 views
8

Bir MsSQL sunucusundan bilgi almak/güncellemek için bir komut dosyası yazıyorum ve bir saklı yordam çağrısı çalışmamı elde edebilirim, ancak ikincisi, updateDB işlevinde değil. İşte benim kod güncelleme prosedürü çalıştırılır sonra Değişiklikleri uygulayın komut hiçbir hata kodlarıKayıtlı bir yordam çağırma python

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 = '[email protected]$$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() 
+0

'exec' ve' execute' arasındaki fark nedir? –

+0

İkisi de aynı şeyi yapıyorlar – user1229126

+0

Eğer sonuçları yazdırıyorsanız bldgRow ve deptRow ne elde edersiniz? –

cevap

1

cevap herkesi bulundu MSSQL 2008 için yeni bir sürücü yerine eski sürücüyü belirttim çünkü bu

conn = pyodbc.connect(driver = '{SQL Server Native Client 10.0}', server = '(local)',   database = 'Inventory', uid = 'sa', pwd = '[email protected]$$w0rd123',autocommit=True) 
+1

Ayrıca, "autocommit = True" değerini de eklediniz. – Manfre

5

ince çalışır gibi:

... 
#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 yılında varsayılan olarak devre dışıdır