Closed
Description
Bug report
The rowcount from an sqlite UPDATE RETURNING query with WHERE id IN (?) used (but not == ?) will be 0.
The reproduction case from #93421 runs successfully. The modified reproduction case below errors with:
Traceback (most recent call last):
File "C:\Data\R\git\electrumsv\x.py", line 41, in <module>
go()
File "C:\Data\R\git\electrumsv\x.py", line 35, in go
assert rowcount == 1, (rowcount, f"was updated: {updated_value=='v2'}")
AssertionError: (0, 'was updated: True')
Reproduction case.
import os
import sqlite3
def go():
# create table
cursor = conn.cursor()
cursor.execute(
"""CREATE TABLE some_table (
id INTEGER NOT NULL,
flags INTEGER NOT NULL,
value VARCHAR(40) NOT NULL,
PRIMARY KEY (id)
)
"""
)
cursor.close()
conn.commit()
# run operation
cursor = conn.cursor()
cursor.execute(
"INSERT INTO some_table (id, flags, value) VALUES (1, 4, 'v1')"
)
ident = 1
cursor.execute(
"UPDATE some_table SET value='v2' "
"WHERE id IN (?) RETURNING id",
(ident,),
)
rowcount = cursor.rowcount
updated_value = cursor.execute("SELECT value FROM some_table WHERE id=1").fetchone()[0]
assert rowcount == 1, (rowcount, f"was updated: {updated_value=='v2'}")
if os.path.exists("file.db"):
os.unlink("file.db")
conn = sqlite3.connect("file.db")
go()
# never reaches here
Your environment
This is the 3.10.9 windows install from python.org on my computer. My coworker installed the version on his Windows computer and could reproduce it as well.
Python 3.10.9 (tags/v3.10.9:1dd9be6, Dec 6 2022, 20:01:21) [MSC v.1934 64 bit (AMD64)] on win32
My coworker has also had it happen on MacOS with 3.10.8
3.10.8 (main, Oct 13 2022, 10:17:43) [Clang 14.0.0 (clang-1400.0.29.102)]
3.2 GHz 8-Core Intel Xeon W
Linked PRs
Metadata
Metadata
Assignees
Labels
Projects
Status
Done