I have been trying to update some values in a sqlite3 table but I am having loads of problems with the `sqlite3.OperationalError: near “GROUP”: syntax error. I have been following the documentation but I am not been very successful to correct the error. What I am trying to do is to find the all_numbers with a value =0 and updated with the max(value)+1 I just need to say that I am new creating databases so any help would be highly appreciated. Thanks in advance.
> def update_tables(connection): #function to update table
> c = connection.cursor() # i have a separated def to create the connection
> data = """SELECT id, cps, all_numb FROM all_records""" #this is my column selection
> c.execute(data)
> rows = (c.fetchall())
> # print(rows)
> _list = []
> for row in rows: # I try to use a python loop to iterate through the rows
> id = row[0]
> cps = row[1]
> all_numb = row[2]
> if cps not in _list:
> _list.append(cps)
> if cps in _list: #here I tried a for loop but it does not work
> sq3 = """UPDATE all_records # this is the update selection
> SET all_numb =(SELECT MAX(all_numb) +1)
> WHERE cps =cps AND all_numb = 0
> GROUP BY cps"""
> c.execute(sq3)
> connection.commit()
> c.fetchall()
Advertisement
Answer
I think this is what you’re trying to do:
UPDATE all_records AS r1
SET all_numb = last_numb + 1
FROM (
SELECT r2.cps, MAX(r2.all_numb) AS last_numb
FROM all_records AS r2
GROUP BY r2.cps
)
WHERE r1.cps = r2.cps AND all_numb = 0
See the documentation of UPDATE FROM
I’m not sure why you’re doing this in a for loop, since you’re not using any of the variables in the loop. This updates the entire table at once, so it doesn’t need to be in a loop.