почему apsw cursor.execute(sql, (vars)) нарушает внешний цикл for
Итак, у меня есть следующий код:
with closing(connection.cursor()) as cursor:
for row in cursor.execute("select *, rowid from positions where status = 'pending'"):
print(row[11])
x=2
if (row[9])!='':
x=3
for y in range(x):
print(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7+y],'position# '+str(row[11]))
sql="insert into trades VALUES (?,?,?,?,?,?,?,?,?)"
#cursor.execute(sql, (row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7+y],'position# '+str(row[11])))
sql="update positions set status = 'processed' where rowid = "+str(row[11])
#cursor.execute(sql)
который дает следующий результат:
2
redacted 10000001 2021-10-19T12:22:37+00:00 CHFJPY SELL 124.27 125.30 124.07 position# 2
redacted 10000001 2021-10-19T12:22:37+00:00 CHFJPY SELL 124.27 125.30 123.77 position# 2
redacted 10000001 2021-10-19T12:22:37+00:00 CHFJPY SELL 124.27 125.30 123.27 position# 2
3
redacted 10000001 2021-10-20T07:53:48+00:00 EURJPY BUY 132.93 131.80 133.13 position# 3
redacted 10000001 2021-10-20T07:53:48+00:00 EURJPY BUY 132.93 131.80 133.43 position# 3
redacted 10000001 2021-10-20T07:53:48+00:00 EURJPY BUY 132.93 131.80 133.93 position# 3
4
redacted 10000001 2021-10-20T07:54:41+00:00 GBPJPY BUY 157.57 156.50 157.77 position# 4
redacted 10000001 2021-10-20T07:54:41+00:00 GBPJPY BUY 157.57 156.50 158.07 position# 4
redacted 10000001 2021-10-20T07:54:41+00:00 GBPJPY BUY 157.57 156.50 158.57 position# 4
но раскомментирование вызовов cursor.execute () прерывает внешний цикл for, ведущий к:
2
redacted 10000001 2021-10-19T12:22:37+00:00 CHFJPY SELL 124.27 125.30 124.07 position# 2
redacted 10000001 2021-10-19T12:22:37+00:00 CHFJPY SELL 124.27 125.30 123.77 position# 2
redacted 10000001 2021-10-19T12:22:37+00:00 CHFJPY SELL 124.27 125.30 123.27 position# 2
и при повторении:
3
redacted 10000001 2021-10-20T07:53:48+00:00 EURJPY BUY 132.93 131.80 133.13 position# 3
redacted 10000001 2021-10-20T07:53:48+00:00 EURJPY BUY 132.93 131.80 133.43 position# 3
redacted 10000001 2021-10-20T07:53:48+00:00 EURJPY BUY 132.93 131.80 133.93 position# 3
и т.д. sql выполняет свою работу, но почему не работает внешний цикл for?
Интересно есть аналогичный вопрос для другого пакета базы данных здесь , без разрешения ... идей ...?
1 ответ
Итак, следуя превосходному руководству DinoCoderSaurus , у меня теперь есть следующее, которое, кстати, работает как шарм ...
sqls=["insert into trades VALUES (?,?,?,?,?,?,?,?,?)","update positions set status = 'processed' where rowid = :posid"]
values=[]
posids=[]
with closing(connection.cursor()) as cursor:
for row in cursor.execute("select *, rowid from positions where status = 'pending'"):
posid=row[11]
x=2
if (row[9])!='':
x=3
for y in range(x):
values.append((row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7+y],'position# '+str(posid)))
posids.append({'posid':posid})
for value in values:
with closing(connection.cursor()) as cursor:
x=0
cursor.execute(sqls[0], value)
cursor.execute(sqls[1],posids[x])
x+=1