почему 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
Другие вопросы по тегам