11

I am writing a script to pull info/update a MsSQL server and i can get my one stored procedure call to work but not my second one in the updateDB function. here is my code the script runs fine no error codes

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() 
5
  • What is the difference between exec and execute? Commented Feb 23, 2012 at 19:06
  • nothing they both do the same thing Commented Feb 23, 2012 at 19:33
  • If you print the results bldgRow and deptRow what do you get? Commented Feb 23, 2012 at 20:53
  • i get 'PE' for bldgCODE and '307' for deptCODE, which is what im supposed to get Commented Feb 23, 2012 at 21:16
  • So the values are just not updated as expected after executing the update procedure? Commented Feb 24, 2012 at 21:12

2 Answers 2

12

Commit your changes after the update procedure is run:

... #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() 

In pyodbc.connect() autocommit is disabled by default

Sign up to request clarification or add additional context in comments.

1 Comment

You don't know how long it took me to find out that you need to do a .commit()
2

found the answer everybody, it was because I specified the legacy driver instead of the newer one for MsSQL 2008 heres the code

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

1 Comment

You also added "autocommit=True", which is the more likely fix, as mentioned by @beargle.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.