Ich versuche, alle Datensätze mit der Summe aller vorhandenen Feldwerte plus einem übergebenen Parameter zu aktualisieren. Wenn das Feld in Datensatz A = 4 und Datensatz B = 5 ist, möchte ich alle Datensätze so aktualisieren, dass A = 4 + X und B = 5 + X ist. Auf diese Weise kann ich alle Datensatzwerte schnell um eine bestimmte Zahl (X) erhöhen. Bisher habe ich nicht herausgefunden, wie ich die Update-Anweisung dazu bringen kann, den übergebenen Parameter zu erweitern.
Ich kann mit dieser Zeile einen fest codierten Wert hinzufügen: c.execute("UPDATE level SET sell = sell + 1;")
Der folgende Code funktioniert so wie er ist. Aber wenn ich versuche, mit der Zeile einen Wert zu übergeben und auf update_sell(1)
diese def update_sell(margin):
Weise auf den übergebenen Wert zu verweisen, c.execute("UPDATE level SET sell = sell + margin;")
schlägt dies fehl. Was übersehe ich hier?
Totaler Python-Neuling hier.
Auszuführendes Skript:
#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()
Klasse:
# 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)
Antwort1
Ich glaube, Sie vergessen :
die Update-Funktion. Bei mir funktioniert das.
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})