基于python开发一个mysql入库程序
平台:
windows11中文版(注意编码) ubuntu20英文版
主要目标需求:
建立一个数据导入python程序,需要具有通用性,即可适配未来数据。
配置文件使用xml,
压缩包内csv源文件介绍
以压缩包2.rar中的csv文件为例,
1,压缩包中的csv包括了基本数据格式,字段类型,但不包括全部数据(全部数据为按日期排列的csv),不包括特殊的类型,需求中会介绍特殊类型。
2,源csv包括的几种字段类型
code ,不包括日期,且code为主键,之后的数据追加需检查code的唯一性
总股本[20210105] ,其中20210105 = 文件名时间。
归属于母公司所有者的净利润[20201231],日期与文件名不对应,则以 [T-N] 来表达。例如当前日期为2021年1月5日,T-N是以文件名日期-20201231 得到T-6。T为排除周末、法定节假日的日期(至少需要2018,2019,2020,2021,2022法定节假日定义,提供部分,不足部分自行百度)。
股票简称,不含有[]日期的定义。
字段运算结果入库,
(收盘价:不复权 - 开盘价:不复权)*100,结果入库1
((收盘价:不复权 - 开盘价:不复权)/跌停价)*100,结果入库2
注意,有大量字段通过运算符产生结果入库的。需支持加减乘除的运算,以及多层括号运算。
其它字段的匹配方案随时增加的可能性,即在单独的.py中适配现有和未来字段,便于维护和高扩展性,这一点很重要。
程序具体需求
1,config.yaml.txt是一个入库的例子配置文件,新的配置文件需用标准xml格式描述。
其中第一列描述为字段名,第二列描述为数据库字段名
2,数据库导入后需按照配置文件数据库字段描述从上而下排列,不允许错位。
3,预处理:在有多个路径时,程序按照先合并csv,后按文件导入数据库的原则进行操作。
a,合并csv时code具有唯一性,并按照code对应的原则进行合并。
b,合并时,将重复字段进行删除操作,并记录log。
c,存在重复code情况该日期需前台询问 跳过该日csv,或忽略不合并该code内容(不允许覆盖)。默认倒数10秒,跳过整个csv,并记录log警告信息。
d,2.rar中的csv实际为一一对应,实际使用中存在csv不为一一对应,因此,后面的csv一定是向第一个csv进行合并。包括后面数据库字段插入,也是以code为主键进行。
4,数据库导入仅允许使用sql语句方式,不得使用py组件直接导入。最低i7-6700处理器下,1日文件5000行,100列情况下,插入必须<=5秒。
5,数据库中已存在内容则为插入模式,需查询字段是否已经村在,未村在的则自按顺序创建字段并以code为主键插入数据。
6,数据库不存在时自动建立。表名为日期。即文件名。
7,数据库导入程序需具备当日运算能力。
8,报告每日数据的导入、插入耗时。
9,以i1 i2为首次导入,i3 i4为新数据插入等方式进行测试。
10,多个数据库或同个数据库多次导入的支持,如配置文件中的描述。
从上文中可以看出,整个需求分为2个部分,1文本合并,2规则入库。其中合并部分存在潜在的匹配和适配问题。
因此预处理合并为一个单独的py,数据库字段匹配入库为一个单独的py。
注意:在实际合并和使用中会遇到code重复的问题,在例子中不存在。
注意:在实际使用中,code具有唯一性,但可能村在code不被包含的情况,这些情况都需要打印错误信息,并记录到log。
注意:该项目需开发文档。
技术人员要求
1,2年以上python经验,精通mysql
2,对需求的理解能力
3,标准规范的代码,可以描述小白级注释,做到代码逐段注释
4,git管理
5,开发文档书写
其它未尽事宜请电话或微信联系