大数据知识体系
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
  • JVM

    • JVM 架构
    • JVM 类加载机制
    • JVM 运行时数据区
    • JVM 垃圾回收机制
    • JVM 性能监控与调优
    • JVM 常见错误
  • Java

    • Java基础

      • Java 基础知识
      • Java 基础 - 枚举类
      • Java 基础 - 异常处理
      • Java 基础 - 泛型
      • Java 基础 - 反射
      • Java 基础 - 代理模式
      • Java 基础 - 注解
    • Java集合

    • Java并发编程

    • Java 开发规范
  • Scala

    • Scala 概述
  • Python

    • Numpy

      • 初识 Numpy
      • ndarray 的创建方式
      • NumPy 的数据类型
      • NumPy 数组计算
      • 拷贝
      • 索引和切片
      • 数学和统计方法
      • 数组形状变换
      • 通用函数
      • 排序
      • 搜索和计数
      • 线性代数
      • 伪随机数生成
      • 广播
      • 文件输入和输出
    • Pandas

      • 初识 Pandas
      • 认识 Series 和 DataFrame
      • Series 和 DataFrame 增删改查
      • Index对象增删改查
      • 普通列和行Index相互转化
      • 快速查看整体信息
      • 数值运算
      • 合并数据集
      • 数值统计与聚合
      • 分组聚合
      • 分类类型
      • 排序和排名
      • 时间序列
      • 文件输入与输出
      • 缺失值处理
      • 字符串处理
      • pandas sql
        • 概述
        • 主要方法
        • 主要引擎
        • 创建链接数据库引擎
        • 读取
        • 写入
      • 其它
  • 语言基础
  • Python
  • Pandas
Will
2022-08-04
目录

pandas sql

# 概述

pandas.io.sql 模块提供了一组查询包装器,以便于数据检索和减少对特定于 DB 的 API 的依赖性

# 主要方法

read_sql_table(table_name, con[, schema, …])     将 SQL 数据库表读入 DataFrame

read_sql_query(sql, con[, index_col, …])     将 SQL 查询读入 DataFrame

read_sql(sql, con[, index_col, …])     将 SQL 查询或数据库表读入 DataFrame

DataFrame.to_sql(name, con[, schema, …])     将存储在 DataFrame 中的记录写入 SQL 数据库

# 主要引擎

engine = create_engine('postgresql://scott:tiger@localhost:5432/mydatabase')

engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')

engine = create_engine('oracle://scott:tiger@127.0.0.1:1521/sidname')

engine = create_engine('mssql+pyodbc://mydsn')

# sqlite://<nohostname>/<path>
# where <path> is relative:
engine = create_engine('sqlite:///foo.db')

# or absolute, starting with a slash:
engine = create_engine('sqlite:////absolute/path/to/foo.db')
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 创建链接数据库引擎

import pandas as pd
from pandas import DataFrame
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:root@localhost:3306/test", encoding="utf8")
# create_engine()有个参数为echo,默认为False,如果指定为True,则会输出查询过程
1
2
3
4
5

# 读取

pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)

data1 = pd.read_sql_table('user', con=engine)
data1
1
2

read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None,chunksize=None)

该方法可以执行增删改查操作

# 3.1 查询1
select_sql1 = "select * from user"
data2 = pd.read_sql_query(select_sql1, con=engine)
data2
1
2
3
4
# 查询2
select_sql2 = "select name,age from user where age > 20"
data3 = pd.read_sql_query(select_sql2, con=engine)
data3
1
2
3
4
# 3.2 增加
insert_sql = "insert into user (name, age, sex) values %(data)s"
params = {'data': ['赵六', '36', '男']}
pd.read_sql_query(insert_sql, con=engine, params=params)
1
2
3
4
# 3.3 修改
update_sql = "update user set age=50 where name=%(data)s"
params = {'data':'赵六'}
pd.read_sql_query(update_sql, con=engine, params=params)
1
2
3
4
# 3.4 删除
delete_sql = "delete from user where name=%(data)s"
params = {'data': '赵六'}
pd.read_sql_query(delete_sql, con=engine, params=params)
1
2
3
4

pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

综合前两个方法,只是为了兼容。用法类似

# 写入

to_sql(name, con, flavor='sqlite', schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)

  • if_exists='replace',如果数据库中有 test_cjk 表,则替换。

  • if_exists='append',如果数据库中有 test_cjk 表,则在表后面添加。

  • if_exists='fail',如果数据库中有 test_cjk 表,则在写入失败。

data = [['Jack', 40, '男'],
        ['Bob', 45, '男'],
        ['Linda', 28, '女']]
columns = ['name', 'age', 'sex']
df = DataFrame(data, columns=columns)
df
1
2
3
4
5
6
res = df.to_sql('user', con=engine, if_exists='append', index=False)
res
1
2
上次更新: 2023/11/01, 03:11:44

← 字符串处理 其它→

Theme by Vdoing | Copyright © 2022-2023 Will 蜀ICP备2022002285号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式