《LearnPython-Python学习笔记》-pandas的to_sql将数据插入MySQL数据库

admin 2025-11-07 01:14:00 编程 来源:ZONE.CI 全球网 0 阅读模式
  • 前言

    前言

    最近做一个Django web的项目要把爬取的一些数据存入MySQL中,数据保存为csv格式,想到pandas中有to_sql这个方法,就采用它了准备:连接MySQL数据库所需的第三方包pymysql、sqlalchemy(pip安装即可)

    1. from sqlalchemy import create_engine
    2. engine = create_engine("mysql+pymysql://{}:{}@{}/{}?charset={}".format('用户名', '登录密码', '127.0.0.1:3306', '数据库名','字符编码'))
    3. con = engine.connect()#创建连接
    4. df.to_sql(name='rumousdata', con=con, if_exists='append', index=False)

    就这么几句,但可能遇到不少问题。我先说下create_engine的url格式吧。用户名、密码不用说,address:port是连接MySQL的ip地址和端口号(默认localhost:3306),数据库名是要连接的数据库,字符编码很重要,要插入中文的话使用utf8

    1. to_sql的几个参数:
    2. name是表名
    3. con是连接
    4. if_exists:表如果存在怎么处理
    5. append:追加
    6. replace:删除原表,建立新表再添加
    7. fail:什么都不干
    8. index=False:不插入索引index

    遇到的坑看清楚url的格式,很多人到处粘贴,内容是啥都搞不清就用。mysql+pymysql://,像这里我指明通过pymysql这个包来连接数据库,不是MySqldb,当报错ModuleNotFoundError: No module named ‘MySQLdb’找不到MySQLdb这个包时就是这个问题

    OperationalError: (pymysql.err.OperationalError) (1142, “DROP command denied to user ‘admin’@‘localhost’ for table ‘rumousdata’”)

    这个是if_exists=‘replace’,删除表时,用户admin无权限要么使用root用户,要么申请权限IntegrityError: (pymysql.err.IntegrityError) (1062, “Duplicate entry ‘1’ for key ‘PRIMARY’”)

    这个是主键已存在1,不能重复中文插入失败

    一是、没有指定连接的字符编码utf8,通常可见什么latin1什么什么的无法插入二是、类似(1366, “Incorrect string value: ‘\xF0\x9F\x92\x9C\xF0\x9F…’ for column ‘text’ at row,\xF0\x9F\x92\x9C\xF0\x9F,这种原因因为MySQL不识别有些字符的utf8编码(如表情字符),这时你需要指定连接字符编码为utf8mb4。数据表对应字段编码也改成utf8mb4

    1. If you are running MySQL before 5.5.3, you have only ‘utf8’. If you need Emoji or Chinese, then you need ‘utf8mb4’. The advice in this section assumes you will be going to utf8mb4. If you are going only to utf8, adjust accordingly.
    2. 还有一些python对mysql数据库操作、连接可能遇到的问题也可在这里找到:http://mysql.rjweb.org/doc.php/charcoll#python

    image.png版权声明:本文为博主原创文章,未经博主允许不得转载。Josonle’s Bloghttps://blog.csdn.net/lzw2016/

    https://blog.csdn.net/lzw2016/article/details/84720433

    以太坊cppgolang区别 编程

    以太坊cppgolang区别

    以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
    progolang 编程

    progolang

    Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
    golangn个发送者 编程

    golangn个发送者

    Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
    golang技能图谱 编程

    golang技能图谱

    从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
    评论:0   参与:  8