Python sqlite3: 전달된 매개변수와 현재 필드 값의 합계로 모든 레코드 업데이트

Python sqlite3: 전달된 매개변수와 현재 필드 값의 합계로 모든 레코드 업데이트

각 기존 필드 값과 전달되는 매개변수의 합계로 모든 레코드를 업데이트하려고 합니다. 레코드 A = 4이고 레코드 B = 5의 필드인 경우 A = 4 + X 및 B = 5 + X가 되도록 모든 레코드를 업데이트하고 싶습니다. 이렇게 하면 모든 레코드 값을 주어진 숫자(X)만큼 빠르게 증가시킬 수 있습니다. 지금까지는 전달되는 매개변수를 확장하기 위해 업데이트 문을 얻는 방법을 알 수 없습니다.

다음 줄에 하드 코딩된 값을 추가할 수 있습니다. c.execute("UPDATE level SET sell = sell + 1;")아래 코드는 그대로 작동합니다. 하지만 라인이 포함된 값을 전달하고 그렇게 전달된 값을 참조하려고 하면 update_sell(1)실패 def update_sell(margin):합니다 c.execute("UPDATE level SET sell = sell + margin;"). 내가 여기서 무엇을 놓치고 있는 걸까요?

여기에 총 파이썬 멍청한 놈이 있습니다.

실행할 스크립트:

#MainScript.py
import sqlite3
from LevelClass import level

conn = sqlite3.connect(':memory:')
c = conn.cursor()

c.execute("""CREATE TABLE level (
            buy integer,
            sell integer,
            quan integer
            )""")

def insert_level(level):
    with conn:
        c.execute("INSERT INTO level VALUES (:buy, :sell, :quan)", {'buy': level.buy, 'sell': level.sell, 'quan': level.quan})

def get_level_by_sell(sell):
    c.execute("SELECT * FROM level WHERE sell=:sell", {'sell': sell})
    return c.fetchall()

def update_sell(margin):
    with conn:
        # below works with "sell + 1", but fails with "sell + margin"
        c.execute("UPDATE level SET sell = sell + 1;")

trans_1 = level(1, 5, 50)
trans_2 = level(2, 10, 60)

insert_level(trans_1)
insert_level(trans_2)

# value to pass to update_sell as var "margin"
update_sell(1)

find = get_level_by_sell(6)
print(find)

find = get_level_by_sell(11)
print(find)

conn.close()

수업:

# saved as LevelClass.py
class level:
    def __init__(self, buy, sell, quan):
        self.buy = buy
        self.sell = sell
        self.quan = quan

    def __repr__(self):
        return "Level('{}', '{}', {})".format(self.buy, self.sell, self.quan)

답변1

:업데이트 기능 을 잊어버린 것 같습니다 . 이것은 나에게 효과적입니다.

def update_sell(margin):
    with conn:
        # below works with "sell + 1", but fails with "sell + margin"
        #c.execute("UPDATE level SET sell = sell + 1")
        c.execute("UPDATE level SET sell = sell + :margin", {"margin":margin})

관련 정보