使用python读写MySQL数据库的基本操作

使用python读写MySQL数据库的基本操作

1.导库

常见的数据库的一些连接方式

  • MySQL

    create_engine('mysql+pymysql://user:password@host:port/db_name')
  • PostgreSQL

    create_engine('postgresql+psycopg2://user:password@host:port/db_name')
  • Oracle

    create_engine('oracle+cx_oracle://user:password@host:port/db_name')
  • SQLServer

    create_engine('mssql+pymssql://user:password@host:port/db_name')

对于MySQL我们需安装pymysql库

#!pip install -i https://pypi.douban.com/simple pymysql
import pandas as pd
import numpy as np
import pymysql
from sqlalchemy import create_engine # 构建数据库连接信息
from sqlalchemy import types        # 可用于dataframe类型的数据与数据库类型转换

2.使用create_engine方法创建连接

user="root"
pw=123456
host="localhost"
port="3306"
db_name="mysql"
# 自定义函数获取数据库的连接信息
def get_mysql_conn(user=user,pw=pw,host="localhost",port="3306",db_name="mysql"):
    return create_engine(f'mysql+pymysql://{user}:{pw}@{host}:{port}/{db_name}?charset=utf8')
mysql_con = get_mysql_conn()

# 也可以一句搞定
mysql_con = create_engine('mysql+pymysql://root:123456@localhost:3306/mysql?charset=utf8')

3.基本操作

通过execute()执行SQL命令,查看所有的数据库名

for database in mysql_con.execute("show databases"):
    print(database)

删除名称中含test的数据库

# 删除chaoshi相关的数据库
for db in [database[0] for database in mysql_con.execute("show databases") if "test" in database[0]]:
       mysql_con.execute(f"drop database {db}")

创建两个数据库,分别命名为Fact和Dim

list = ['Fact','Dim']
for db in  list:
     mysql_con.execute(f"create database {db}")

在数据库中创建表,表名命名为fact_order_tb

# 创建表
ddl = """
create table Fact.fact_order_tb(
  订单ID varchar(15)
 ,订单日期 timestamp
 ,发货日期 timestamp
 ,邮寄方式 varchar(10)
 ,客户ID varchar(10)
 ,城市 varchar(10)
 ,产品ID varchar(15)
 ,销售额 decimal(9,3)
 ,数量 bigint
 ,折扣 decimal(9,3)
 ,利润 decimal(9,3)
)
"""
mysql_con.execute(ddl)

效果: 

 使用to_sql()将python读取的数据存储到MySQL数据库fact_order_tb表中

# 设置各个字段的类型映射
fact_order_tb_dtypes = { 
                      '订单ID':types.VARCHAR(15),
                      '订单日期':types.TIMESTAMP,
                      '发货日期':types.TIMESTAMP,
                      '邮寄方式':types.VARCHAR(10),
                      '客户ID':types.VARCHAR(10),
                      '城市':types.VARCHAR(10),
                      '产品ID':types.VARCHAR(15),
                      '销售额':types.DECIMAL(9,3),
                      '数量':types.BIGINT,
                      '折扣':types.DECIMAL(9,3),
                      '利润':types.DECIMAL(9,3)}
# 获取数据
fact_order_tb = pd.read_csv(rf"D:\Python\20230701 CDA二级\ETL\fact_order_tb_2023.csv")
fact_order_tb.head()
fact_order_tb.shape

# 向MySQL数据库中写入数据
fact_order_tb.to_sql(name ="fact_order_tb"  # dataframe加载到数据库里面的哪个表中
                     ,con = get_mysql_conn(db_name="fact") # 连接对象,要指定的数据库名
                     ,dtype = fact_order_tb_dtypes #对dataframe里的数据进行数据库的数据类型的映射
                     ,if_exists = "append"   # 在表中有数据时使用replace覆盖数据,使用append可追加数据
                     ,index = None # DF索引列不存入数据库
                    )

在python中使用pd.read_sql()查询数据

pd.read_sql(sql=f"select * from fact_order_tb limit 3"
            ,con=get_mysql_conn(db_name="fact"))

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值