详解PyMySQL插入字典类型的数据

在我们爬虫或者调API获取数据后,需要将数据存入到数据库中,如果数据是列表嵌套字典格式的话,一般做法是遍历列表,然后用字典生成对应的SQL语句再执行插入到表中。本文将介绍一种更加简便的方法来插入字典类型的数据。

我们有如下数据列表,需要将该数据插入到对应的数据表student中(表的字段名和数据列表中字典的键名相同)

student_list = [
    {"name": "Tony", "age": 19, "sex": "male"},
    {"name": "Lisa", "age": 18, "sex": "female"},
    {"name": "Jack", "age": 20, "sex": "male"}
]

使用pymysql批量插入数据可以用以下方法

cursor.executemany(sql, data_list)

上面的sql是一条包含占位符的插入语句,data_list就是需要插入的数据

可以通过以下方法来生成对应的sql

def generate_sql(data_list):
    data = data_list[0]  # 取出第一条
    cols = ", ".join('`{}`'.format(k) for k in data.keys())  # 字段名拼接
    val_cols = ', '.join('%({})s'.format(k) for k in data.keys())  # 对应值的占位符拼接
    sql = """
    INSERT INTO student(%s) VALUES(%s)
    """ % (cols, val_cols)
    return sql

生成的sql如下:

INSERT INTO student(`name`, `age`, `sex`) VALUES(%(name)s, %(age)s, %(sex)s)

生成sql后就可以使用executemany()方法批量插入数据到数据库中,全部代码如下

import pymysql
MYSQL_CONFIG = {
    'host': 'localhost',  # IP地址
    'port': 3306,  # 端口
    'user': 'myuser',  # 用户名
    'passwd': '111111',  # 密码
    'db': 'myclass',  # 数据库
    'charset': 'utf8',  # 编码
}
def generate_sql(data_list):
    data = data_list[0]
    cols = ", ".join('`{}`'.format(k) for k in data.keys())
    val_cols = ', '.join('%({})s'.format(k) for k in data.keys())
    sql = """
    INSERT INTO student(%s) VALUES(%s)
    """ % (cols, val_cols)
    return sql
def main():
    student_list = [
        {'name': 'Tony', 'age': 19, 'sex': 'male'},
        {'name': 'Lisa', 'age': 18, 'sex': 'female'},
        {'name': 'Jack', 'age': 20, 'sex': 'male'}
    ]
    conn = pymysql.connect(**MYSQL_CONFIG)  # 数据库连接
    cur = conn.cursor()  # 游标对象
    sql = generate_sql(student_list)
    cur.executemany(sql, student_list)
    conn.commit()
    cur.close()
    conn.close()
if __name__ == '__main__':
    main()

执行以上代码,就可以看到数据成功插入到表中

name age sex
Tony 19 male
Lisa 18 female
Jack 20 male

到此这篇关于PyMySQL插入字典类型的数据的文章就介绍到这了,更多相关PyMySQL字典类型数据内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在python中使用pymysql往mysql数据库中插入(insert)数据实例

    咱还是直接看代码吧! from pymysql import * def main(): # 创建connection连接 conn = connect(host='', port=3306, database='', user='', password='', charset='utf8') # 获取cursor对象 cs1 = conn.cursor() # 执行sql语句 query = 'insert into 表名(列名1, 列名2, 列名3, 列名4, 列名5, 列名6) value

  • Pymysql实现往表中插入数据过程解析

    代码如下 # -*- coding = utf-8 -*- # @time:2020/5/28/028 21:00 # Author:cyx # @File:插入数据.py # @Software:PyCharm import pymysql con = pymysql.connect(host='localhost',user='root',password='123456',database='python_db',port=3366) # 创建游标对象 cur = con.cursor()

  • pymysql 插入数据 转义处理方式

    最近用pymysql把一些质量不是很高的数据源导入mysql数据库的时候遇到一点问题,主要是遇到像 \ 这样的具有特殊意义的字符时比较难处理.这里有一个解决方案 基本环境 python3 pymysql linux 问题描述 插入(查询)数据时遇到一些特殊字符会使得程序中断.操作失败.比如 \这样的转义字符 解决方案 插入(查询)之前用 connection.escape(str)处理一下即可 代码示例 import pymongo sql_pattern = "select * from my

  • 详解PyMySQL插入字典类型的数据

    在我们爬虫或者调API获取数据后,需要将数据存入到数据库中,如果数据是列表嵌套字典格式的话,一般做法是遍历列表,然后用字典生成对应的SQL语句再执行插入到表中.本文将介绍一种更加简便的方法来插入字典类型的数据. 我们有如下数据列表,需要将该数据插入到对应的数据表student中(表的字段名和数据列表中字典的键名相同) student_list = [ {"name": "Tony", "age": 19, "sex": &qu

  • 详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 id 的值呢? 一:使用 last_insert_id() SELECT LAST_INSERT_ID(); 1. 每次 mysql 的 query 操作在 mysql 服务器上可以理解为一次"原子"操作, 写操作常常需要锁表, 这里的锁表是 mysql 应用服务器锁表不是我们的应用程序锁表

  • 详解Python实现字典合并的四种方法

    目录 1.用for循环把一个字典合并到另一个字典 2.用dict(b, **a)方法构造一个新字典 3.用b.update(a)的方法,更新字典 4.把字典转换成列表合并后,再转换成字典 (1)利用a.items().b.items()把a.b两个字典转换成元组键值对列表 (2)合并列表并且把合并后的列表转换成字典 5.实例,netmiko使用json格式的数据进行自动化操作 (1)json格式的处理 (2)json格式的设备信息列表 (3)netmiko读取json类型信息示例 1.用for循

  • 详解python的字典及相关操作

    目录 什么是字典 创建一个字典 在原有字典上添加“键-值”对 修改字典中的值 删除键-值对 由类似对象组成的字典 遍历字典 什么是字典 字典是Python中最强大的数据类型之一,也是Python语言中唯一的映射类型.映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表,字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型. 字典类型与序列类型的区别:1.存取和访问数据的方式不同.2.序列类型只用数字类

  • python3实现往mysql中插入datetime类型的数据

    昨天在这个上面找了好久的错,嘤嘤嘤~ 很多时候我们在爬取数据存储的时候都需要将当前时间作为一个依据,在python里面没有时间类型可以直接拿来就用的.我们只需要在存储之前将时间类型稍作修饰就行. datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 如: #插入产品信息 insert_good_sql = """ INSERT INTO T_GOOD(good_name, good_type, img_

  • 详解C++11原子类型与原子操作

    1.认识原子操作 原子操作就是在多线程程序中"最小的且不可并行化的"操作,意味着多个线程访问同一个资源时,有且仅有一个线程能对资源进行操作.通常情况下原子操作可以通过互斥的访问方式来保证,例如Linux下的互斥锁(mutex),Windows下的临界区(Critical Section)等.下面看一个Linux环境使用POSIX标准的pthread库实现多线程下的原子操作: #include <pthread.h> #include <iostream> usi

  • 详解MySQL8.0​ 字典表增强

    MySQL中数据字典是数据库重要的组成部分之一,INFORMATION_SCHEMA首次引入于MySQL 5.0,作为一种从正在运行的MySQL服务器检索元数据的标准兼容方式.用于存储数据元数据.统计信息.以及有关MySQL server的访问信息(例如:数据库名或表名,字段的数据类型和访问权限等). 8.0之前: 1.元数据来自文件 2.采用MEMORY表引擎 3.frm文件 存放表结构信息 4.opt文件,记录了每个库的一些基本信息,包括库的字符集等信息 5..TRN,.TRG文件用于存放触

  • 详解Java中ThreadLocal类型及简单用法

    目录 1 基本概念 2 简单使用 3 应用场景 4 底层原理 4.1 set(Object) 4.2 get() 4.3 remove() 4.4 ThreadLocalMap 5 内存泄漏隐患和防止策略 5.1 为什么会发生内存泄漏? 5.2 怎样防止内存泄漏? 1 基本概念 ThreadLocal类提供了线程局部变量.这些变量与普通变量的不同之处在于,每个访问一个变量(通过其get或set方法)的线程都有自己的.独立初始化的变量副本.ThreadLocal实例通常是希望将状态与线程关联起来的

  • 详解Java中字典树(Trie树)的图解与实现

    目录 简介 工作过程 数据结构 初始化 构建字典树 应用 匹配有效单词 关键词提示 总结 简介 Trie又称为前缀树或字典树,是一种有序树,它是一种专门用来处理串匹配的数据结构,用来解决一组字符中快速查找某个字符串的问题.Google搜索的关键字提示功能相信大家都不陌生,我们在输入框中进行搜索的时候,会下拉出一系列候选关键词. 上面这个关键词提示功能,底层最基本的原理就是我们今天说的数据结构:Trie树 我们先看看Tire树长什么样子,以单纯的单词匹配为例,首先它是一棵多叉树结构,根节点是一个空

  • 一文详解Python如何优雅地对数据进行分组

    假设我们有这样一种数据: data = [     ("apple", 30), ("apple", 35),     ("apple", 32), ("pear", 60),     ("pear", 32), ("pear", 60),     ("banana", 102), ("banana", 104) ] # 我们希望变成如下格式 &q

随机推荐