Pandas to_sql详解

  • 源码:
def to_sql(
        self,
        name,
        con,
        schema=None,
        if_exists="fail",
        index=True,
        index_label=None,
        chunksize=None,
        dtype=None,
        method=None,
    ):
  • 函数功能: 将存储在DataFrame中的记录写入SQL数据库。
  • 参数:
    • name:要写入的表的名字
    • con:创建数据库连接的对象。仅支持由sqlalchemy.engine.Enginesqlite3.Connection创建的连接
    • schema:用于创建数据库对象,基本上都是使用默认值。参考
    • if_exists:如果表存在怎么办?
      • fail:抛出ValueError异常
      • replace:在插入数据之前删除表。注意不是仅删除数据,是删除原来的表,重新建表哦。
      • append:插入新数据。如果有主键,要避免主键冲突;看清表的格式,DataFrame的columns与表的columns是对应的;DF的index默认是作为一列数据的,也就是说默认会写入数据库的,下面仔细介绍:
    • index:将索引作为一列写入数据库,默认为True,也就是说默认DF的索引是要写入数据库的index_label为列名
    • index_label:将索引写入数据库时的列名,默认为index;如果DF是多级索引,则index_label应为一个序列
    • chunksize:批处理,每次处理多少条数据。默认全部,一般没啥用,除非数据量太大,明显感觉卡的时候可以分批处理。
    • dtype:一个字典,指定列的数据类型。键是列的名字,值是sqlalchemy types或者sqlite3的字符串形式。如果是新建表,则需要指定类型,不然会以存储量最大类型作为默认类型。比如varchar类型就会成为text类型,空间资源浪费很多。如果是添加数据,则一般不需要规定该参数。sqlclchemy的类型基本都在sqlalchemy.types及sqlalchemy模块下,比如:sqlalchemy.types.INT、 sqlalchemy.INT
    • method:哪种类型的插入语句?
      • None:默认单行插入
      • ‘multi’:多行插入
      • callable:以回调函数插入,写函数的名字,没用过。
  • 实例:较多的时候我们只想添加一些数据,以添加数据为例
    user表:id自增主键
id name
1
2
3

添加一些数据:

import pandas as pd
from sqlalchemy import create_engine

df = pd.DataFrame([["四"], ["五"], ["六"]], columns=['name'])

# 创建Engine实例
engine = create_engine("mysql+pymysql://root:root@localhost:3306/test")
# 创建数据库连接
con = engine.connect()

df.to_sql('user', con, if_exists="append", index=False)

结果:

id name
1
2
3
4
5
6

【sqlalchemy的使用】参考

# 创建Engine实例
engine = create_engine("dialect+driver://username:password@host:port/database")
# 创建数据库连接
con = engine.connect()

dialect:方言,用于指定哪种数据库,比如:mysql
driver:驱动,用于连接数据库的驱动,不同数据库的驱动不一样。以mysql为例,有:pymysql、mysqldb
username:用户名,比如:root
password:密码,比如:123456
host:主机,比如:localhost
port:端口,比如:3306
database:数据库名字,比如:test
例:engine = create_engine("mysql+pymysql://root:123456@localhost:3306/test")

你可能感兴趣的:(Pandas)