Python遍历字典列表并保存到db

2024-09-30 16:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,正在尝试将python中的原始post数据保存到mysql中。在

我想迭代json中发布的每个元素,并将所有数据保存到DB。在

json对象列表:(30个对象,每11列)

[
 {
   "col1":7878,
   "col2":"c004979d3969a86a8fdcda2f92eb39e3",
   "col3":"b000yht23",
    ...
   "col11":2

 },
 {
   "col1":7878,
   "col2":"c004979d3969a86a8fdcda2f92eb39e3",
   "col3":"b000yht23"
    ...
   "col11":43 
 },
 #upto 30 objects
 ....
]

“json_test”表说明:

CREATE TABLE json_test (

`col1` varchar(250) NOT NULL,

`col2` varchar(250) NOT NULL,

`col3` varchar(250) NOT NULL,

`col4` varchar(250) NOT NULL,

`col5` varchar(250) NOT NULL,

`col6` varchar(250) NOT NULL,

`col7` varchar(250) NOT NULL,

`col8` varchar(250) NOT NULL,

`col9` varchar(250) NOT NULL,

`col10` varchar(250) NOT NULL,

`col11` varchar(200) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

更新以将数据保存到数据库:

我的py代码看起来像:

^{pr2}$

更新代码结果:

似乎只插入了最后一条记录


Tags: 数据对象代码testjsonnotnullcol2
2条回答

{em>把Python对象的转换为声明的字符串。在

request.json的结果已经是一个Python数据结构。你不需要用它做任何其他的事情。在

把这乱七八糟的东西换掉

#UPDATED with column_names
k=0
for i in jsonobject:
    # Connect to the database
    conn = pymysql.connect(host='10.20.3.4', port=3306, user='root', passwd='', db='python_db')


    try:
        with conn.cursor() as cursor:
            column_names = ['col1','col2','col3',...'col11']
            column_names_str = ', '.join(column_names)
            binds_str = ', '.join('%s' for _ in range(len(column_names)))
            sql=("INSERT INTO `json_test` ({column_names})" \
                  " VALUES({binds})"
            .format(column_names=column_names_str,binds=binds_str))   
            for data_dict in jsonobject:
            values = [data_dict[column_name]
                      for column_name in column_names]

            cursor.execute(sql, values)
            print("Insert successfull!")
            #UPDATED 
            k+=1
            conn.commit()

    finally:
        conn.close()


return "Insert successful"

^{pr2}$

总和

  • k对象是冗余的
  • 另外,名称i不清楚,让我觉得它是某种索引,而实际上它不是:它是一个dict对象
  • 我们不需要从jsonobject为每个对象创建连接,因为这是一个昂贵的操作
  • 我们不需要在每次迭代中创建sql对象(它保持不变)
  • 将列名存储在list/tuple中可以避免在查询和值提取中两次写入它们。在
  • 正在创建绑定str

    %s, %s, ...
    

    当我们错过/添加了太多绑定别名时,根据列数动态地保存我们的打印错误

相关问题 更多 >