如何根据不同类型表的输入创建插入语句?

How to create a insert statement based on the input of different type of tables?

我编写了一个使用 mysql 连接器将数据插入到 mysql 中的 table 的函数。

def insert_row(data, table, conn):
    """Insert new row  of data receieved.
    """
    cursor = conn.cursor()
    query = ("INSERT INTO " + table + " "
    "(temp, humidity)"
    " VALUES (%(temp)s, %(humidity)s)")
    print(query)
    cursor.execute(query, data)
    conn.commit()
    cursor.close()

但是,现在我想修改它以便能够基于 table 及其来自数据的列动态构建查询。 data arg 是一个 dict 对象。

当前构造的语句是这个 INSERT INTO particle_photon (temp, humidity) VALUES (%(temp)s, %(humidity)s) 但不同的 table 可能有不同的列进入 data dict 对象。

您可以从准备好的查询中删除列名称及其周围的括号,然后将它们再次包含在您的 table 参数中。所以 table 将等于 particle_photon (temp, humidity) 而不是 particle_photon.

我想通了,

def insert_row(data, table, conn):
    """Insert new row  of data receieved.
    """
    cursor = conn.cursor()
    placeholder = ", ".join(["%s"] * len(data))
    stmt = "insert into `{table}` ({columns}) values ({values});".format(
        table=table, 
        columns=",".join(data.keys()), 
        values=placeholder
        )
    cursor.execute(stmt, list(data.values()))
    conn.commit()
    cursor.close()