跳转至

MySQL 数据库

一、概述

AILab-PDBC (Python DataBase Connectivity)是数智教育发展(山东)有限公司 AI Lab 100 团队开发的高效、灵活的数据接口(API)

ailab100.pdbc.sql类用于用于关系型数据库管理系统(RDBMS)的读写,支持MySQL 、微软SQL SERVERSQLiteORACLEMariaDBPostgreSQL等主流结构化数据库。

本章介绍如何使用ailab100.pdbc.sql.Mysql 连接 MySQL 数据库进行读写和下载,以及数据库类型和Pandas类型之间的转换。

MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发、发布和支持。

二、API 接口说明

(一) DBConnector 基类

(二) MySQL 类

三、应用案例及技术性能

(一) MySQL应用案例

(1) 从MySQL数据库中读取public_rent_price_forecast_data表中的数据,将符合houseFloor="低" and totalFloor=2条件的记录输出至polars.DataFrame

from ailab100.alcedo_pdbc.sql import MySQL

config = {'USERNAME':'root',
          'PASSWORD':'root',
          'HOST':'127.0.0.1',
          'PORT':'3306',
          'DATABASE':'ailab'
          }

db_mysql = MySQL(config)

# 读取数据
df = db_mysql.read_as_datafra(table_name="public_rent_price_forecast_data",
                              params={"houseFloor":"低","totalFloor":2},
                              return_type='polars'
                              )

print(df)

(2) 从MySQL数据库中读取public_rent_price_forecast_data表中的数据,将符合houseFloor="低" and totalFloor=2条件的记录输出并下载为test.csv文件。

# 读取数据下载文件
db_mysql.download_as_file(filename="tests_yield_curve.csv",
                          table_name="public_rent_price_forecast_data",
                          params={"houseFloor":"低","totalFloor":2},)

(3) 将polars.DataFrame的数据写入到MySQLailab数据库中的examples数据表。

# 写入数据
import polars as pl
import pandas as pd

data = {'Column1':[1,2,3,4],'Column2':['A','B','C','D']}
data_df = pd.DataFrame(data)
pl_df = pl.from_pandas(data_df)  # 将pandas.DataFrame转成polars.DataFrame格式

db_mysql.write_dataframe(df=pl_df,table_name='examples',database='ailab')

(二) 数据类型映射

MySQL- Pandas 数据类型映射

MySQL Type Pandas Type Comment
TINYINT int64, Int64(nullable)
SMALLINT int64, Int64(nullable)
MEDIUMINT int64, Int64(nullable)
INT int64, Int64(nullable)
BIGINT int64, Int64(nullable)
FLOAT float64
DOUBLE float64
DECIMAL float64, object(Clickhouse) Clickhouse return DECIMAL in string, cannot support precision larger than 28
VARCHAR object
CHAR object
DATE datetime64[ns] only support date after year 1970
TIME object
DATETIME datetime64[ns] only support date after year 1970
TIMESTAMP datetime64[ns]
YEAR int64, Int64(nullable)
TINYBLOB object
BLOB object
MEDIUMBLOB object
LONGBLOB object
JSON object
ENUM object

(三) 性能测试

1.不使用Redis 缓存

实验室通过比较 Python 中的不同解决方案,采用 4 个线程并行处理,读取 MySQL 中一个 10,981,106 行的数据表 (1,092,616,192 字节,1.02 GB) 加载到 DataFrame 中,实验结果如下:

(1) 响应时间 (越短越好)

pg-time.png

(2) 内存消耗 (越低越好)

pg-time.png

总之,AILab PDBC 使用的内存减少了 1/3 ,与 Pandas 相比响应时间减少了近 1 倍(与 Polars 相比,响应时间相差无几 )。

2.使用Redis 缓存