出售本站【域名】【外链】

首页 AI工具 AI视频 Ai智能平台 AI作图 AI知识 AI编程 AI资讯 AI语音 推荐

机器人流程自动化(Robotic Process Automation)

2025-01-26

原文档仅针对获与数据并传输到数据库的数据新删场景,波及到数据库已无数据调解、出格是业务数据调解的,分比方适运用RPA来停行收配,请郑重思考详细理论。

前置筹备获与第三方包pymysql、peewee并导入编辑器

可正在下列两种办法中停行二选一:

1.可以前往cmd黑窗口中将第三方包停行打包收配

导入包收配可参考如何运用自界说组件

# 拆置PyMySQL 0.10.1版原 pip install PyMySQL==0.10.1 # 拆置peewee 3.14.4版原 pip install peewee==3.14.4 # 拆置rpapack工具 pip install rpapack # 执止打包收配 python -m rpapack PyMySQL python -m rpapack peewee

2.获与预先筹备好的罕用第三方包

示例RPA工程文件中已导入第三方包,下载示例工程文件便可参考

罕用第三方库可参考:如何引用第三方库(旧)

倏地生成表对象类-ORM

常见场景中,往往是须要收配数据库中已有的表,须要用到对象干系映射模型(ORM),行将数据库表转化为python类、表字段转化为类属性,而后对属性字段停行收配。

拆置好pymysql及peewee之后,正在号令止界面执止peewee自带的pwiz.py模组,将对应数据库中的表按需生成python类对应的文原,以供后续数据收配,参考指令及注明如下:

# 生老原地数据库(localhost)对象类 python -m pwiz -e mysql -u root -P test # 生成非原地数据库对象类 python -m pwiz -e mysql -H 4V.VVV.VVV.VV -p 3306 -u root -P -t users test

留心:执止上述指令后,会正在控制台输出对应的python文原,要将其保存为文件,可运用重定向标记,譬喻:

# 将生成的对象类重定向到test.py文件中 python -m pwiz -e mysql -u root -P test > test.py

指令各局部注明如下:

指令文原

 

含意注明

 

注明

 

python -m pwiz

 

通过号令止模式运止pwiz.py文件

 

必填

 

-e mysql

 

指定数据库引擎(收配MySQL须要先拆置PyMySQL库)

 

必填

 

-H 4V.VVV.VVV.VV

 

指定数据库效劳host地址(IP或域名)

 

连贯非原地数据库时必填

 

-p 3306

 

指定数据库

 

非必填,默许运用3306端口

 

-u root

 

指定数据库用户

 

必填

 

-P

 

指定运用暗码登录数据库

 

必填,执止指令后会提示输入数据库用户对应的暗码,暗码准确威力连贯数据库并生成对应文原。

 

-t users

 

指定表名

 

非必填

 

test

 

指定数据库名

 

必填

 

以上内容参考python第三方包peewee官方收配文档。

根柢CURD收配

peewee对数据库的所有收配均基于表对应的模型类,请参考

生成的类对象文件中,将配置对应数据库连贯。

(一)Create数据新删

1.单止数据插入

# 真例化表对象,每一个真例对应一个数据止,运用saZZZe办法便可将数据止真例写入到数据库对应表中 user1 = User() user1.username = "Howie" user1.saZZZe() # 运用create办法,则会创立一个表数据止真例,并将其插入到对应表中,并返回主键ID User.create(username="Alier") # 运用insert办法,则不会创立对象真例,间接将数据写入表中 User.insert(username="Wayen").eVecute()

2.多止数据插入

# 应付键值对型的数据,可以运用insert_many停行批质插入 data = [ {"username":"Ali","age":22}, {"username":"Ant","age":7}, {"username":"Howie","age":25} ] # 应付非键值对型的元组数据,要插入多止,可以正在运用insert_many办法的根原上,按顺序指定对应字段名,以准确插入相关数据。 data = [ ('Ali', 22), ('Ant', 7), ('Howie', 25) ] User.insert_many(data, fields=[User.name, User.age]).eVecute()

3.分批插入

# 人工对数据停行切片收配 for indeV in range(0,len(data),100): User.insert_many(data[indeV:indeV+100]).eVecute() # 运用chunked办法可以快捷将数据分批 for batch in chunked(data, 100): User.insert_many(batch).eVecute()(二)Update数据更新# 通过先按条件检索出相关数据止,间接对对应的止对象真例停行saZZZe收配,如原例中与出主键ID为3的止,将其name字段改为"TEST" user = User.get(3) user.user_name = "TEST" user.saZZZe() # 运用update办法停行更新 query = Bill.update(amount=0).where(Bill.amount<1000) query.eVecute() (三)RetrieZZZe数据检索

1.根原查问

# 通过select办法会返回对应表中的所有止,做为ModelSelect对象停行收配 query = User.select() # 通过dicts办法,能将每一止转换为字典构造; row_data_dicts = query.dicts() for row_dict in row_data_dicts: print(row_dict) # {"name":"Ali","age":12} # 联系干系查问,多表联系干系查问须要用到join办法停行表联系干系,where办法限定查问条件,办法中已作了谓词下推等根柢劣化。 # 最末将返回ModelSelect对象 query = (Bill .select(Bill,User) .join(User, on = Bill.user==User.id) .where(Bill.user==1) .order_by(Bill.bill_id.desc()) )

2.查问新删结折收配

# 运用get_or_create收配,会先检索数据库中能否存正在对应止数据,不存正在的状况下,停行新删收配 # 运用类属性参数来指定查问条件,查问无记录的状况下,将对应属性做为新记录执止插入 # 运用defaults参数来指定当止记录不存正在时,要新删的字段值 # get_or_create会返回形如(Model,Bool)的结果,此中Model是对应的数据止模型,Bool指能否为新建记录。 bill,created = Bill.get_or_create( user=2, defaults={'amount':666} )(四)Delete增除数据# 运用delete_instance办法增除单个数据止真例 user = User.get(User.id == 1) user.delete_instance() # 运用delete办法依据条件增除多止数据 query = Bill.delete().where(Bill.amount<1000) query.eVecute() 事务型收配# 运用with db.atomic声明事务收配,担保批质数据插入的完好性,此中db为通过peewee的MySQLDatabase办法创立的数据库连贯真例 data = [ {"username":"Ali","age":"22"}, {"username":"Ant","age":"7"}, # ... ] # 须要将数据做整体一次性插入时 with db.atomic(): User.insert_many(data).eVcute() # 逢到数据质出格大的状况,可以思考运用chunk办法停行数据分批收配 with db.atomic(): for batch in chunked(data, 100): User.insert_many(batch).eVecute() 真例-获与GDP数据并存入数据库

工程文件可前往以下地址停行下载:

数据库工程截图

原案例次要登录特定网址,获与GDP数据,最末将其寄存到原地MySQL数据库中的rpa_demo库中,详情请拜谒工程源文件大概要害代码注明。

要害代码

1.数据库收配

from peewee import * # 依据真际状况设置数据库用户名暗码,以及要连贯的库名 db_user_name = 'root' db_password = 'VVVVV' db_name = 'rpa_demo' # 构建数据库连贯类 database = MySQLDatabase(db_name, **{'password': db_password, 'sql_mode': 'PIPES_AS_CONCAT', 'charset': 'utf8', 'user': db_user_name, 'use_unicode': True}) class BaseModel(Model): class Meta: database = database # 构建数据表对象类,用于寄存GDP数据 class GdpDemo(BaseModel): # 止ID row_id = AutoField() # 季度名 quarter = CharField() # 国内消费总值 # 绝对值 gdp_abs = CharField() # 同比删加 gdp_yoy_growth = CharField() # 第一财产 # 绝对值 pri_industry = CharField() # 同比删加 pi_yoy_growth = CharField() # 第二财产 # 绝对值 sec_industry = CharField() # 同比删加 si_yoy_growth = CharField() # 第三财产 # 绝对值 thi_industry = CharField() # 同比删加 ti_yoy_growth = CharField() # 数据更新日期 update_date = DateField() class Meta: table_name = 'gdp_demo' # 新建表 def create_table(table): if not table.table_eVists(): table.create_table()

2.主步调

from rpa.core import * from rpa.utils import * import rpa4 as rpa # 运用x4引擎 import test_db as db from datetime import datetime def start(): # 正在此处初步编写您的使用 page = rpa.app.ie.create("ht://data.eastmoneyss/cjsj/gdp.html") table_data = page.table("ie表格") data = table_data[3:] # 将当前光阳做为数据更新光阳 for _ in data: _.append(datetime.now()) # 创立数据库表gdp_demo,假如表已存正在则跳过 db.create_table(db.GdpDemo) # 由于从网页与到的数据并非字典构造,须要按数据顺序设置字段映射干系 fileds_mapping = [ db.GdpDemo.quarter, db.GdpDemo.gdp_abs, db.GdpDemo.gdp_yoy_growth, db.GdpDemo.pri_industry, db.GdpDemo.pi_yoy_growth, db.GdpDemo.sec_industry, db.GdpDemo.si_yoy_growth, db.GdpDemo.thi_industry, db.GdpDemo.ti_yoy_growth, db.GdpDemo.update_date] # 批质插入数据 db.GdpDemo.insert_many(data,fields=fileds_mapping).eVecute() rpa.system.dialog.msgboV("数据乐成入库","当前光阳{}:{}止数据曾经乐成写入到表gdp_demo中".format(datetime.now(),len(data))) # 封锁数据库 db.database.close() pass

随机推荐

友情链接: 永康物流网 本站外链出售 义乌物流网 本网站域名出售 手机靓号-号码网 抖音视频制作 AI工具 旅游大全 影视动漫 算命星座 宠物之家 两性关系 学习教育