Pandas to_sql详解

该函数`to_sql`用于将pandasDataFrame对象的数据写入SQL数据库,支持if_exists参数处理表存在的情况,可以设置是否包含索引,以及数据类型等。通过sqlalchemy创建数据库引擎和连接,提供了批处理和多种插入方式。
摘要由CSDN通过智能技术生成
  • 源码:
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自增主键
idname
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)

结果:

idname
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")

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pandas中提供了多种方法来筛选数据,其中比较常用的是`boolean indexing`和`query`两种方式。 ## Boolean indexing `Boolean indexing`是指使用逻辑条件来筛选数据的方式。在pandas中,我们可以使用`[]`来实现这一操作,使用`[]`内的逻辑表达式可以筛选出符合条件的行。例如: ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) # 使用逻辑表达式筛选数据 df_filtered = df[df['A'] > 1] print(df_filtered) ``` 输出结果: ``` A B C 1 2 5 8 2 3 6 9 ``` 上面代码中,`df_filtered = df[df['A'] > 1]`表示筛选出`'A'`列中大于1的行。 ## Query `query`方法是使用类似SQL的方式来筛选数据。在pandas中,我们可以使用`query`方法来实现这一操作。使用`query`方法可以避免写很长的逻辑表达式,增加代码可读性。例如: ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) # 使用query方法筛选数据 df_filtered = df.query('A > 1') print(df_filtered) ``` 输出结果: ``` A B C 1 2 5 8 2 3 6 9 ``` 上面代码中,`df_filtered = df.query('A > 1')`表示筛选出`'A'`列中大于1的行。 另外,`query`方法还支持使用外部变量的方式来传递条件。例如: ```python import pandas as pd df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}) # 使用外部变量传递条件 cond = 1 df_filtered = df.query(f'A > {cond}') print(df_filtered) ``` 输出结果: ``` A B C 1 2 5 8 2 3 6 9 ``` 上面代码中,我们使用了`f-string`将变量`cond`插入到了查询条件中。 总的来说,`Boolean indexing`方式比较灵活,可以灵活处理各种复杂的逻辑条件,而`query`方式则更加简单易懂。在实际应用中,我们可以根据具体情况选用不同的方式进行数据筛选。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值