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
File details
Details for the file ecnu-openapi-sdk-python-1.0.0.tar.gz
.
File metadata
- Download URL: ecnu-openapi-sdk-python-1.0.0.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3066c59c7ce62d8c51ab028d4a056db569ad86424af17b5703df4b2f9e4da32c |
|
MD5 | a90d633959bf06ca765dae1e3e97dfc1 |
|
BLAKE2b-256 | 6ee2e11304ce88e8dbb4aec9e22c8ae9f38f4503db6c1697a78a5f829a4db68d |
File details
Details for the file ecnu_openapi_sdk_python-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: ecnu_openapi_sdk_python-1.0.0-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fb0892656f4292c8ea5577bc337047c846f7abb2b5dde5bf258955cd9b149fd8 |
|
MD5 | 242475954cc15fc39521019e8ebe82d5 |
|
BLAKE2b-256 | 952b56eecbc80f525722b7af58e629bb78e85bf42a11dc707bf10d426c14fb92 |