Appel d'une procédure stockée python
Je suis en train d'écrire un script pour tirer info/mise à jour d'un serveur MsSQL et que j'ai un appel de procédure stockée à travailler, mais pas dans mon deuxième, dans le updateDB fonction. voici mon code, le script fonctionne très bien, pas de codes d'erreur
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()
Quelle est la différence entre
rien ils font tous les deux la même chose
Si vous imprimez les résultats bldgRow et deptRow qu'obtenez-vous?
j'obtiens 'PE' pour bldgCODE et '307' pour deptCODE, qui est ce qui im censé être
Si les valeurs ne sont tout simplement pas mis à jour comme prévu après l'exécution de la procédure de mise à jour?
exec
et execute
?rien ils font tous les deux la même chose
Si vous imprimez les résultats bldgRow et deptRow qu'obtenez-vous?
j'obtiens 'PE' pour bldgCODE et '307' pour deptCODE, qui est ce qui im censé être
Si les valeurs ne sont tout simplement pas mis à jour comme prévu après l'exécution de la procédure de mise à jour?
OriginalL'auteur user1229126 | 2012-02-23
Vous devez vous connecter pour publier un commentaire.
Valider vos changements après la procédure de mise à jour est exécutée:
Dans
pyodbc.connect()
autocommit est désactivé par défautOriginalL'auteur Bryan
trouvé la réponse tout le monde, c'est parce que j'ai spécifié le pilote au lieu de la plus récente pour MsSQL 2008 heres le code
OriginalL'auteur user1229126