ecnu-openapi-sdk-python
Project description
Python-SDK
能力
- 授权模式(token 管理)
- client_credentials 模式
- password 模式
- authorization code 模式
- 接口调用
- GET
- POST
- PUT
- DELETE
- 数据同步(接口必须支持翻页)
- 全量同步
- 同步为 csv 格式
- 同步为 xls/xlsx 格式
- 同步到数据库
- 同步到模型
- 增量同步(接口必须支持ts增量参数)
- 同步到数据库
- 同步到模型
- 全量同步
依赖
- python 3.10 +
- requirements.txt
相关资料
支持的数据库
理论上只要 sqlalchemy支持的数据库驱动都可以支持,以下是测试的情况
如果sqlalchemy无法直接支持,可以先同步到模型,然后自行处理数据入库的逻辑。
数据库 | 驱动 | 测试情况 | upsert 支持 |
---|---|---|---|
MySQL | pymysql | 测试通过 | todo |
SQLite | null | 测试通过 | todo |
PostgreSQL | psycopg2 | 测试通过 | todo |
SQL Server | pymssql | 测试通过 | todo |
Oracle | cx_oracle | 测试通过 | todo |
示例
详见以下示例代码,和示例代码中的相关注释
性能
性能与 ORM 的实现方式(特别是对 upsert 的实现方式),数据库的实现方式,以及网络环境有关,不一定适用于所有情况。
当同步到数据库时,SDK 会采用分批读取/写入的方式,以减少内存的占用。
当同步到模型时,则会将所有数据写入到一个数组中,可能会占用较大的内存。
以下是测试环境
同步程序运行环境
- i5 cpu
- 32G 内存
- windows10 X64
- WD 固态硬盘
- dotnet 4.8
测试接口信息
- /api/v1/sync/fake
- 使用 pageSize=2000 仅限同步
- 接口请求耗时约 0.2 - 0.3 秒
- 接口数据示例
{
"errCode": 0,
"errMsg": "success",
"requestId": "73a60094-c0f1-4daf-bc58-4626fbef7a2b",
"data": {
"pageSize": 2000,
"pageNum": 1,
"totalNum": 10000,
"rows": [{
"id": 1,
"colString1": "Oxqmn5MWCt",
"colString2": "mzavQncWeNlOlFgUW7HC",
"colString3": "mvy6K1HU7rdCicPbvvA3rNZcDWPhvV",
"colString4": "XGsK5NVQHOu4JrmHZ9ZL1iLf0UYpdIvNIzswULzb",
"colInt1": 3931594532918648027,
"colInt2": 337586114254574578,
"colInt3": 2291922259603323213,
"colInt4": 3000562485500051124,
"colFloat1": 0.46541339000557547,
"colFloat2": 0.6307996439929248,
"colFloat3": 0.9278393850101392,
"colFloat4": 0.7286866920659677,
"colSqlTime1": "2023-10-20 22:02:07",
"colSqlTime2": "2023-10-20 22:02:07",
"colSqlTime3": "2023-10-20 22:02:07",
"colSqlTime4": "2023-10-20 22:02:07"
}]
}
}
测试结果
- 数据库:本地mysql:5.7 (docker环境)
- pageSize = 2000
- batchSize = 100
数据量(totalNum ) |
Time Spent on Direct CallAPI |
Time Spent on Model Sync |
Time Spent on DB Sync |
---|---|---|---|
1w |
0.324615 | 1.192462 | 6.551163 |
10w |
0.280315 | 7.836467 | 30.583456 |
100w |
0.28313 | 78.528211 | 263.68381 |
数据量(totalNum ) |
Memory Spent on Model Sync |
Memory Spent on DB Sync |
---|---|---|
1w |
3.07421875 | 3.12890625 |
10w |
107.265625 | 15.22265625 |
100w |
695.171875 | 12.56640625 |
注意事项
1 OAuth2
身份认证+鉴权
initOauth2ClientCredentials
方法可以实现对token的自动续约与管理,指定client_id与client_secret即可
2 同步到csv
文件SyncToCSV
使用案例在exampleSyncToCSV()
方法中,开发者仅需在example_csv.py
文件中进行配置即可。仅需配置api
参数,包括url
、pageSize
等,还需配置写入的文件名。
3 同步到数据模型SyncToModel
因为写入到csv
文件中的数据都是字符串类型,为满足开发者需求,提供同步数据到Model的功能。使用案例在exampleSyncToModel()
方法中,开发者仅需在example_model.py
文件中进行配置即可。配置:Model
类型,api
,指定Model
对象
4 同步到数据库SyncToDB
使用案例在exampleSyncToDB()
方法中,开发者仅需在example_db.py
文件中进行配置即可。ORM:sqlalchemy
该sdk
提供全量与增量刷新数据到DB中,支持数据库MySQL
(建议)、Oracle
、PostgrelSQL
、SQLServer
目前暂时不支持 upsert
,全量刷新时建议删除原本存在的表结构,增量同步时则不需要。配置如下:数据库、api
、映射类,注意若接口返回的数据存在id,一般无需指定自增
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for ecnu-openapi-sdk-python-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3066c59c7ce62d8c51ab028d4a056db569ad86424af17b5703df4b2f9e4da32c |
|
MD5 | a90d633959bf06ca765dae1e3e97dfc1 |
|
BLAKE2b-256 | 6ee2e11304ce88e8dbb4aec9e22c8ae9f38f4503db6c1697a78a5f829a4db68d |
Hashes for ecnu_openapi_sdk_python-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb0892656f4292c8ea5577bc337047c846f7abb2b5dde5bf258955cd9b149fd8 |
|
MD5 | 242475954cc15fc39521019e8ebe82d5 |
|
BLAKE2b-256 | 952b56eecbc80f525722b7af58e629bb78e85bf42a11dc707bf10d426c14fb92 |