Python - 自动化MySQL查询:传递参数

时间:2010-01-07 23:42:15

标签: python mysql parameters automation

序列中的代码工作正常,但希望将MySQL代码改进为更有效的格式。

第一种情况是关于一个接收参数并从MySQL db返回customerID的函数:

def clean_table(self,customerName):
    getCustomerIDMySQL="""SELECT customerID
    FROM customer
    WHERE customerName = %s;"""

    self.cursorMySQL.execute(getCustomerIDMySQL,(customerName))
    for getID_row in self.cursorMySQL:
        customerID=getID_row[0]

    return customerID

在我们事先知道结果只是一个输出的情况下,如何在不使用“for”语句的情况下将同样的东西放入我的getID_row中?

对于第二种情况,该函数正在运行,其中包含表名('customer')...

def clean_tableCustomer(self):
    cleanTableQuery = """TRUNCATE TABLE customer;"""
    self.cursorMySQL.execute(cleanTableQuery)

    setIndexQuery = """ALTER TABLE customer AUTO_INCREMENT = 1;"""
    self.cursorMySQL.execute(setIndexQuery)

那么,如何将表名替换为通过函数传递的参数?以下是我尝试完成此操作的方法:

def clean_table(self,tableName):
    cleanTableQuery = """TRUNCATE TABLE %s;"""
    self.cursorMySQL.execute(cleanTableQuery,(tableName))

    setIndexQuery = """ALTER TABLE %s AUTO_INCREMENT = 1;"""
    self.cursorMySQL.execute(setIndexQuery,(tableName))

但这次MySQL没有用。

我们非常感谢所有意见和建议。

2 个答案:

答案 0 :(得分:3)

对于第一种情况(简单,但在没有行时很容易得到KeyError):

customerID = self.cursorMySQL.fetchone()[0]

更正确的是为游标类实现一个新方法:

def autofetch_value(self, sql, args=None):
    """ return a single value from a single row or None if there is no row
    """
    self.execute(sql, args)
    returned_val = None

    row = self.fetchone()
    if row is not None:
        returned_val = row[0]

    return returned_val

对于第二种情况:

def clean_table(self,tableName):
    cleanTableQuery = """TRUNCATE TABLE %s;""" % (tableName,)
    self.cursorMySQL.execute(cleanTableQuery)

    setIndexQuery = """ALTER TABLE %s AUTO_INCREMENT = 1;""" % (tableName,)
    self.cursorMySQL.execute(setIndexQuery)

确保清理数据,因为光标不会。

答案 1 :(得分:0)

不幸的是,您无法参数化表格的名称(请参阅this post)。您将不得不使用Python字符串操作来执行您在此处尝试的操作。

希望这会有所帮助,我花了一段时间才发现我遇到这个问题。