У меня есть sql db-соединение, которое, помимо всего прочего, имеет функцию обновления (скажем, 4) таблиц, которые зависят друг от друга. Первоначально у меня были все запросы в одной функции updates_all_in_one
, которая работает нормально.
Сейчас я пытаюсь разбить это на разделенные функции (поскольку мне может потребоваться вызвать частичные обновления и избежать перезаписи одного и того же кода), например update1
... update4
.
Однако я заметил, что когда я использую разбиения и вызываю их обратно в функции updates_call_subfunc
, сразу после вызова update1
кажется, что обновления этой функции не выполняются (поэтому возникают проблемы с зависимостями, так как update1 не применяется) и если класс соединителя от одной функции ко второй не связывается.
Я немного читаю в Интернете и, кажется, если соединение является частью класса, оно остается открытым / общим, но я не вижу, почему обновления в последовательности завершаются неудачно.
Спасибо
import pyodbc as mdb
class DbHandlerSQL(object):
def __init__(self, dbHost, dbName, dbUser, dbPass):
if os.name=='posix':
connStr = ('Driver={ODBC Driver 13 for SQL Server};Server='+ dbHost +'; Database='+dbName+';UID='+dbUser+';PWD='+dbPass)
else:
connStr = ('Driver={SQL Server};Server='+ dbHost +'; Database='+dbName+';UID='+dbUser+';PWD='+dbPass)
self.conn = pyodbc.connect(connStr)
self.conn.timeout = 200
self.dbCursor = self.conn.cursor()
#==================================================================
def updates_all_in_one(self,myname, mytype, mysource, local_id):
try:
q1 = " update table1 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q1, (myname, mytype, mysource, local_id) )
q2 = " update table2 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q2, (myname, mytype, mysource, local_id) )
q3 = " update table3 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q3, (myname, mytype, mysource, local_id) )
q4 = " update table4 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q4, (myname, mytype, mysource, local_id) )
except:
raise Exception('problem during uploading')
self.dbCursor.commit()
#==================================================================
def updates_call_subfunc(self,myname, mytype, mysource, local_id):
self.update1(myname, mytype, mysource, local_id)
' Test 1
self.update2(myname, mytype, mysource, local_id)
' Test 2
self.update3(myname, mytype, mysource, local_id)
' Test 3
self.update4(myname, mytype, mysource, local_id)
' Test 4
self.dbCursor.commit()
#==================================================================
def update1(self,myname, mytype, mysource, local_id):
q1 = " update table1 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q1, (myname, mytype, mysource, local_id) )
#==================================================================
def update2(self,myname, mytype, mysource, local_id):
q2 = " update table2 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q2, (myname, mytype, mysource, local_id) )
#==================================================================
def update3(self,myname, mytype, mysource, local_id):
q3 = " update table3 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q3, (myname, mytype, mysource, local_id) )
#==================================================================
def update4(self,myname, mytype, mysource, local_id):
q4 = " update table4 \
set name=? , type=?, source=? \
where local_id=?"
self.dbCursor.execute(q4, (myname, mytype, mysource, local_id) )