我有以下更新查询:
UPDATE table1 SET name = ?, surname = ?, birth_date = ?, sex = ? WHERE name = ? AND surname = ?
我通过sqlite3
python包运行这个查询,具体使用的方法是:
def _connect_and_execute(query, data=None):
conn = None
try:
conn = sqlite3.connect(DB_FILE_PATH)
cur = conn.cursor()
if data is None:
cur.execute(query)
else:
cur.execute(query, data)
conn.commit()
except sqlite3.Error as e:
logging.error(e)
raise e
finally:
if conn:
conn.close()
DB_FILE_PATH
是一个常量,保存sql文件的路径,调用方法时使用上面的查询作为query
参数,使用列表["John", "Johnson", "01/01/2000", "M", "John", "Johnson"]
。
查询执行时没有错误,但实际上没有更改数据库中的值(通过数据库资源管理器软件和其他选择查询检查)。显然,要更新的相应记录已经存在。
我在互联网上做了一点搜索,我对这种行为的假设是name
和surname
列被绑定参数引用了两次。据我所知,page states是可以通过使用相应的索引来绑定值。我尝试将查询更新为:
UPDATE table1 SET name = ?1, surname = ?2, birth_date = ?3, sex = ?4 WHERE name = ?5 AND surname = ?6
但是行为仍然相同。
是否可以将参数绑定到同一列两次?这是我的问题吗?如果是,哪种可能的解决方案?
1条答案
按热度按时间lg40wkob1#
我发现我错在哪里了。问题不在更新查询中,而在我传递给绑定的参数值中。确实,它们包含数字,但我将它们作为整数而不是字符串传递。通过将它们转换为字符串,我解决了问题。
我还检查了问题中的两个查询是否都工作正常,即使同一列被多次引用,也不需要指定参数索引。