python & sqlite -存在多个同名列时绑定参数

8yparm6h  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(106)

我有以下更新查询:

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"]
查询执行时没有错误,但实际上没有更改数据库中的值(通过数据库资源管理器软件和其他选择查询检查)。显然,要更新的相应记录已经存在。
我在互联网上做了一点搜索,我对这种行为的假设是namesurname列被绑定参数引用了两次。据我所知,page states是可以通过使用相应的索引来绑定值。我尝试将查询更新为:

UPDATE table1 SET name = ?1, surname = ?2, birth_date = ?3, sex = ?4 WHERE name = ?5 AND surname = ?6

但是行为仍然相同。
是否可以将参数绑定到同一列两次?这是我的问题吗?如果是,哪种可能的解决方案?

lg40wkob

lg40wkob1#

我发现我错在哪里了。问题不在更新查询中,而在我传递给绑定的参数值中。确实,它们包含数字,但我将它们作为整数而不是字符串传递。通过将它们转换为字符串,我解决了问题。
我还检查了问题中的两个查询是否都工作正常,即使同一列被多次引用,也不需要指定参数索引。

相关问题