python - 在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 收到的任何数据插入到相应的列中,并将其他数据设为空。
解决方案
你可以这样尝试:
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 :)
推荐阅读
- javascript - 为什么 JSLint 会警告我我的 switch-case 语句格式不正确?
- varnish-vcl - 如何在 VCL 4.0 中重现 VCL 3.0 vcl_recv / restart 的行为
- rcpp - RcppArmadillo:对角矩阵乘法很慢
- python - 使用 python 可视化神经网络
- algorithm - 检测体素或体素组是否仍连接到对象的其余部分
- python - 为什么熊猫需要重塑我的布尔索引,我该如何修复它以避免警告?
- python - 需要帮助解决我的班级的一些代码问题
- bioinformatics - 在 fastq 文件中过滤具有超过 8 个相同连续核苷酸的序列?
- java - 使用 Java 8 在数组/列表中收集文件名
- python - 如何在嵌套列表的每个子列表中指定特定元素的索引?