首页 > 解决方案 > 在python中创建一个动态插入查询以将数据保存在mysql db中

问题描述

我在 mysql 中有一个表,我正在从 python 客户端插入数据。

我正在使用插入查询将数据插入表中

代码

sql_insert_query = """ INSERT INTO Data
                          (`deviceID`,`date`,`timestamp`,`counter`,`rssi`,
                            `CO2 Sensor Value`,
                            `Supply DPT`,
                            `block`,
                            `floor`) 
                             VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"""
connection = mysql.connector.connect(host='localhost',database='minniedb',user='',
                                    password='',auth_plugin='mysql_native_password')
cursor = connection.cursor()

"""
 create 'insert_tuple' based on some api calls
"""
cursor.execute(sql_insert_query,insert_tuple)
connection.commit()
cursor.close()
connection.close()
print('inserted in db')

当一切都是静态的时,这可以正常工作。我有一个案例,当我的表中的列数约为 60-70 并且我从 api 获得的参数是列的子集(大约 10-15)并且这些参数每次都可以更改。api 返回列名和值。来自 api 的样本返回可以是形式

{
    'deviceID':20,
    'counter' :61,
    'block'   :'A'

}

或者它可以是

{
   'deviceID'        :25,
   'CO2 Sensor Value':600,
   'floor'           : 5

}

在这种情况下,我如何编写查询以将我从 api 收到的任何数据插入到相应的列中,并将其他数据设为空。

标签: pythonmysqlpython-3.x

解决方案


你可以这样尝试:

sensor_data = {
    'deviceID':20,
    'counter' :61,
    'block'   :'A'

} 
sql_insert_query = """ INSERT INTO Data {} VALUES {}""".format(tuple(sensor_data.keys()), tuple(sensor_data.values()))

PS:对于传感器数据,我建议使用 google Firebase :)


推荐阅读