pymysql:如何格式化查询类型?

pymysql: How to format types on query?

我正在尝试使用 pymysql (Python 3) 在 MySQL table 上插入行,相关代码如下。

def saveLogs(DbConnection, tableName, results):
    for row in results:
        formatStrings = ",".join(["?"]*len(row))
        sql = "INSERT INTO %s VALUES (%s);"%(tableName,formatStrings)
        DbConnection.cursor().execute(sql, tuple(row))
    DbConnection.commit()

我使用 "?" 作为类型,但出现错误 not all arguments converted during string formattingrow是由stringintdatetime.datetime组成的列表。我想问题是 "?" 但我已经检查了 PEP 249,但我仍然不清楚我应该怎么做。有什么建议吗?

仅对 table 名称使用字符串格式(但请确保您信任来源或进行了适当的验证)。对于其他所有内容,请使用 查询参数 :

def saveLogs(DbConnection, tableName, results):
    cursor = DbConnection.cursor()
    sql = "INSERT INTO {0} VALUES (%s, %s, %s)".format(tableName)
    for row in results:
        cursor.execute(sql, row)
    DbConnection.commit()

还有那个executemany() method:

def saveLogs(DbConnection, tableName, results):
    cursor = DbConnection.cursor()
    cursor.executemany("INSERT INTO {0} VALUES (%s, %s, %s)".format(tableName), results)
    DbConnection.commit()