我有一个带有自动表索引代码的新改进版本的函数:
def update_tableIndex(self,tableName):
getIndexMySQLQuery = """SELECT numberID
FROM %s;""" % (tableName,)
updateIndexMySQLQuery = """UPDATE %s
SET numberID=%s WHERE numberID=%s;""" % (tableName,)
updateIndex=1
self.cursorMySQL.execute(getIndexMySQLQuery)
for row in self.cursorMySQL:
indexID = row[0]
self.cursorMySQL.execute(updateIndexMySQLQuery,(updateIndex,indexID))
updateIndex+=1
虽然查询'getIndexMySQLQuery'可以正常使用这种语法,但另一个'updateIndexMySQLQuery'不起作用。
任何提示或建议如何解决这个问题?
我们非常感谢所有意见和建议。
答案 0 :(得分:2)
第二个不起作用,因为您在查询字符串中使用了三个占位符,并且只为插值提供了一个变量。
updateIndexMySQLQuery = """UPDATE %s
SET numberID=%%s WHERE numberID=%%s;""" % (tableName,)
这样,字符串格式化机制不会指望您提供3个值,因为百分号是“转义”的(对于第一个版本的答案,我感到羞耻)。
答案 1 :(得分:0)
使用%s替换开头的表名,但使用问号创建参数替换。
updateIndexMySQLQuery = """UPDATE %s
SET numberID=? WHERE numberID=?;""" % (tableName,)
...
self.cursorMySQL.execute(updateIndexMySQLQuery,(updateIndex,indexID))
答案 2 :(得分:0)
感谢您的意见。我只是重新做了整个功能。以下是它的工作方式和现状:
def update_tableIndex(self,tableName,indexName):
getIndexMySQLQuery = """SELECT %s
FROM %s;""" % (indexName,tableName,)
updateIndex=1
self.cursorMySQL.execute(getIndexMySQLQuery)
for row in self.cursorMySQL:
indexID = row[0]
updateIndexMySQLQuery = """UPDATE %s
SET %s=%s WHERE
%s=%s;""" % (tableName,
indexName,updateIndex,
indexName,indexID)
self.cursorMySQL.execute(updateIndexMySQLQuery)
updateIndex+=1
因此,唯一要做的就是将列名和表名作为参数通知。它允许重用数据库中所有其他表的代码。
希望这对其他人也有用。