需求:将Python字典类型的数据存储在mysql数据库中
思路分析:
-
数据库中表的字段设计成“键”,目的是方便SQL插入语句的构造
-
定义函数构建插入的SQL语句
-
pymysql连接数据库执行SQL语句插入
# 根据字典数据和插入表信息创建插入SQl语句
def insert_sql(res, table, uid):
# 列的字段
keys = ', '.join(res.keys())
# 行字段
values = list(res.values())
values = str(values).strip('[]')
sql = 'INSERT INTO {table}(主键, {keys}) VALUES ({uid},{values});'.format(uid=uid,table=table, keys=keys, values=values)
return sql
插入SQL语句的构成:
insert into table_name(uid, name, sex) values (1, '张三', '男');
问题1:如何优雅的构建插入SQL语句字段和值
前面这一段:uid, name, sex 这个可以处理成一个字符串格式,就是将字典中的所有键进行组合形成类似结构的字符串
# 列的字段
keys = ', '.join(res.keys())
# 执行完字符串格式: uid, name, sex
后面values那个字段涉及SQL语法问题:中文需要添加引号处理。如果写成如下
values =','.join(res.values) 结果是:1,张三,男 ;没有引号后续会报错
这里的处理思路是将所有的values值转化成列表,再转化成字符串再去除二边的 [ ]
# 行字段
values = list(res.values())
values = str(values).strip('[]')
[ 1, '张三', '男'] ---> 1, '张三', '男'
还有一种方法参考如下博客:
Python优雅的将字典数据存入数据库中_亥虫的博客-CSDN博客_python 字典插入数据库
# 列的字段
keys = ', '.join(data.keys())
# 行字段
values = ', '.join(['%s']*len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
# 将字段的value转化为元祖存入
cursor.execute(sql, tuple(data.values()))
db.commit()
问题2:连接mysql数据库执行SQL命令
插入的SQL语句构建完成,下面就是使用pymysql连接数据库,获取数据库对象,游标对象执行SQL语句。
参考之前写的博客:
PyMySQL使用_小杜℃的博客-CSDN博客_pymysql 使用
项目需要,用
python
实现了将
字典
内容
存入
本地的
mysql
数据库
。比如说有个
字典
dic={“a”:”b”,”c”:”d”},
存入
数据库
效果图如下:
'''''
Insert items into database
@author: hakuri
import
MySQL
db
def InsertData(TableName,dic):
conn=
MySQL
db.connect(host='localhost',user='root',passwd='
让我的植物浇水系统收集我的最新状态
数据
为我的SmartPi提供易于管理且矩阵结构清晰的结构
SmartPi还使用
MySQL
数据库
收集
数据
。 由于某些属性有许多读/写周期。 将它们保留在内存
中
更有意义,这在存储卡(Raspberry Pi)上也更为温和。
使用像
MySQL
一样的SELECT和UPDATE
保留现有
数据
类型
# 创建表格
mycursor.execute("CREATE TABLE dict (id INT AUTO_INCREMENT PRIMARY KEY, key VARCHAR(255), value VARCHAR(255))")
# 定义要
存入
数据库
的
字典
mydict = {"name": "John", "age": 36, "city": "New York"}
# 将
字典
中
的键值对逐一
存入
数据库
for key, value in mydict.items():
sql
= "INSERT INTO dict (key, value) VALUES (%s, %s)"
val = (key, value)
mycursor.execute(
sql
, val)
# 提交更改
mydb.commit()
# 输出
存入
数据库
的
字典
print(mycursor.rowcount, "record inserted.")
以上代码可以将
字典
存入
名为"dict"的
MySQL
表格
中
,每个键值对分别
存入
表格的"key"和"value"列
中
。