2023.12.18 制作py,shell脚本进行数据库操作与定时任务

目录

虚拟机中已有的两个库: bi_db和shopnc_db 

1.在pycharm中,使用pymysql,连接数据库进行增删改查操作

1.1 查询

1.2 修改

1.3 删除

1.4 增加

 2.使用pandas,操作pycharm对数据库进行操作

2.1 对mysql进行覆盖写入

2.2 对mysql进行追加写入

3.在linux中,进行自动化定时调度脚本

3.1 在linux_mysql中进行建库建表操作,编写插入数据等sql语句.

3.2 将插入数据等操作的sql语句,复制到python文件中,使用python来进行数据库的操作

连接库的语句

中间的sql

 输出数据的语句

3.3 创建shell脚本文件,去调用python文件

3.4 使用linux命令,定时执行shell脚本文件 crontab -e

4. 五个python脚本中的细节

daily_all pf orders.py :没有问题

daily_all store_chain.py:

daily_brand_chains.py:

daily_erp_orders.py:

daily stage_chain.py:


虚拟机中已有的两个库: bi_db和shopnc_db 

product表:

1.在pycharm中,使用pymysql,连接数据库进行增删改查操作

1.1 查询

import pymysql# 建立与数据库的连接
conn1 = pymysql.connect(host='192.168.88.100',port=3306,user='root',password='123456',db='shopnc_db'
)
conn2 = pymysql.connect(host='192.168.88.100',port=3306,user='root',password='123456',db='bi_db'
)
# 2.创建游标对象
c1 = conn1.cursor()
# 3.编写sql语句
sql = "select * from shopnc_db.product"
# 4.执行sql语句
c1.execute(sql)
# 5.获取结果集
result = c1.fetchall() #获取所有结果集
print(result)
# 6.关闭连接
conn1.close() # 关闭连接


1.2 修改

import pymysql# 建立与数据库的连接
conn1 = pymysql.connect(host='192.168.88.100',port=3306,user='root',password='123456',db='shopnc_db'
)
conn2 = pymysql.connect(host='192.168.88.100',port=3306,user='root',password='123456',db='bi_db'
)
# 2.创建游标对象
c1 = conn1.cursor()
# 3.编写sql语句
sql = "update product set price = 20 where pname = 'bwj'"
# 修改全部的价格都变为10000
# 4.执行sql语句
result = c1.execute(sql)
conn1.commit()  # 提交事务
# 5.获取结果集
if result != 0:print("修改成功")
else:print("修改失败")
# 6.关闭连接
conn1.close()  # 关闭连接

1.3 删除

import pymysql# 建立与数据库的连接
conn1 = pymysql.connect(host='192.168.88.100',port=3306,user='root',password='123456',db='shopnc_db'
)# 2.创建游标对象
c1 = conn1.cursor()
# 3.编写sql语句
sql = "delete from product where pname = 'hwj' "
# 4.执行sql语句
result = c1.execute(sql)
conn1.commit()  # 提交事务
# 5.获取结果集
if result != 0:print("删除成功")
else:print("删除失败")
# 6.关闭连接
conn1.close()  # 关闭连接

1.4 增加

import pymysql# 建立与数据库的连接
conn1 = pymysql.connect(host='192.168.88.100',port=3306,user='root',password='123456',db='shopnc_db'
)
conn2 = pymysql.connect(host='192.168.88.100',port=3306,user='root',password='123456',db='bi_db'
)
# 2.创建游标对象
c1 = conn1.cursor()
# 3.编写sql语句
sql = "insert into product value (0,'hwj',9900,'c001')"
# 4.执行sql语句
result = c1.execute(sql)
conn1.commit()  # 提交事务
# 5.获取结果集
if result != 0:print("插入成功")
else:print("插入失败")
# 6.关闭连接
conn1.close()  # 关闭连接

 

 2.使用pandas,操作pycharm对数据库进行操作

2.1 对mysql进行覆盖写入

将查询到的表的数据,写入到另一个表中

import pandas as pd
from sqlalchemy import create_engine# 创建与mysql数据库的连接
shopnc_engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/shopnc_db')
bi_engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/bi_db')
# mysql://用户名:密码@ip地址:端口号/数据库#  获取所有表中数据
df = pd.read_sql("select * from product",con=shopnc_engine)
print('读取数据成功')#  将上面获取到的内容,写入另一个库中,写入的模式是覆盖
#  假如没有这个表,pandas会帮你自动新建,但类型不一定一样
df.to_sql('overwrite_test_table',con=bi_engine,if_exists = 'replace',index = False)
print('覆盖写入数据成功')

2.2 对mysql进行追加写入

将查询到的表的数据,写入到另一个表中

import pandas as pd
from sqlalchemy import create_engine# 创建与mysql数据库的连接
shopnc_engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/shopnc_db')
bi_engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/bi_db')
# mysql://用户名:密码@ip地址:端口号/数据库#  获取所有表中数据
df = pd.read_sql("select * from product",con=shopnc_engine)
print('读取数据成功')# 写入模式是追加
#  假如没有这个表,pandas会帮你自动新建,但类型不一定一样
df.to_sql('append_test_table',con=bi_engine,if_exists = 'append',index = False)
print('追加写入数据成功')

3.在linux中,进行自动化定时调度脚本

3.1 在linux_mysql中进行建库建表操作,编写插入数据等sql语句.

两个库,shopnc_db作为数据源, 在数据源中查询到的结果放到bi_db库中

3.2 将插入数据等操作的sql语句,复制到python文件中,使用python来进行数据库的操作

连接库的语句

# -*- coding: UTF-8 -*-from sqlalchemy import create_engine
import pandas as pd
# 忽略警告
import warnings
warnings.filterwarnings('ignore')# 创建mysql数据库链接
# 生产库shopnc_db链接
shopnc_engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/shopnc_db')
# BI库bi_db链接
bi_engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/bi_db')

中间的sql

# sql语句
daily_all_store_chain_sql = """
selectarea.province,  -- 省份名称chains.chain_num,  -- 门店数量store.store_num,  -- 店铺数量curdate() collect_time  -- 统计时间
from (selectarea_id,area_name as provincefrom shopnc_db.shopnc_areawhere area_id < 32
) area
left join (selectareaid_1,count(distinct chain_id) as chain_numfrom shopnc_db.uc_chainwhere is_auth = 1and chain_name not like '%%test%%'and chain_name not like '%%测试%%'and add_time < unix_timestamp(curdate())group by areaid_1
) chains on chains.areaid_1 = area.area_id
left join (selectareaid_1,count(distinct store_id) as store_numfrom shopnc_db.uc_storewhere is_auth = 1and store_name not like '%%test%%'and store_name not like '%%测试%%'and add_time < unix_timestamp(curdate())group by areaid_1
) store on store.areaid_1 = area.area_id
"""

 输出数据的语句

# 读取mysql数据库中的数据
daily_all_store_chain_data = pd.read_sql(daily_all_store_chain_sql, con=shopnc_engine)
# 将读取的数据保存到mysql数据库中
# name: 表名
# con: 数据库链接
# if_exists: 数据保存方式 replace->覆盖保存 append:追加保存
# index: 是否保留索引序号列, True保留, False保留
daily_all_store_chain_data.to_sql(name="daily_all_store_chain", con=bi_engine, if_exists="append", index=False)

3.3 创建shell脚本文件,去调用python文件

前面是python的软件路径  ,中间是要调用执行文件 , 右边是日志记录

3.4 使用linux命令,定时执行shell脚本文件 crontab -e

[root@node1 finereport_file]# crontab -e

linux里的Crontab,定时任务命令

时间格式 : * *   *  *  *  

分  时  日  月  周 

命令 第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

4. 五个python脚本中的细节

脚本运行失败的主要原因都是SQL语句的细节,先在本地pycharm进行运行,确认无误了,再将.py文件拖入虚拟机的linux中,再在linux里使用脚本调用,最后确认结果

表中id主键字段设置了auto_increment后,null和0都代表自动使用自增 

daily_all pf orders.py :没有问题

daily_all store_chain.py:

语句中只有一个%的,都需要变为两个;因为%在python里是占位符,%% 在有%拼接的的字符串里,如果要打印百分号,用两个百分号表示%%

daily_brand_chains.py:

daily_erp_orders.py:

daily stage_chain.py:

同上,百分号,字段名字的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/289118.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【坐标系在动态SLAM中究竟有多重要】

文章目录 概要整体架构流程背景表示小结 概要 这篇文章对动态SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;的多种解决方案进行了深入分析&#xff0c;并确定了解决该问题的最佳方案。文章的重点在于强调了坐标系在解决动态SLAM问题中的重要性。 动态S…

DC-8靶场

目录 DC-8靶场链接&#xff1a; 首先进行主机发现&#xff1a; sqlmap得到账号密码&#xff1a; 反弹shell&#xff1a; exim4提权&#xff1a; Flag&#xff1a; DC-8靶场链接&#xff1a; https://www.five86.com/downloads/DC-8.zip 下载后解压会有一个DC-8.ova文件…

ADS学习笔记(一)——更新中

在ADS中&#xff0c;信号上升时间为信号从0&#xff5e;100&#xff05;所用的时间&#xff0c;而实际上定义的上升边均为10&#xff05;&#xff5e;90&#xff05;&#xff0c;所以可以认为上升边&#xff1d;0.8*ADS设置上升时间。 一、终端开路及短路的反射信号 1.仿真条…

gitcode邀请协作人员

项目首页 点击项目设置 点击项目成员设置--生成邀请链接 设置权限、是否需要审核、成员有效时间、邀请链接有效时间&#xff08;不设置时间就是永久有效&#xff09; 点击创建链接 点击复制分享给别人加入即可

Python---互斥锁

1.互斥锁的概念 互斥锁: 对共享数据进行锁定&#xff0c;保证同一时刻只能有一个线程去操作。 注意: 互斥锁是多个线程一起去抢&#xff0c;抢到锁的线程先执行&#xff0c;没有抢到锁的线程需要等待&#xff0c;等互斥锁使用完释放后&#xff0c;其它等待的线程再去抢这个锁…

netty线程调度定制

1、netty的线程调度问题 在netty的TCP调度中&#xff0c;线程的调度封装在NioEventLoopGroup中&#xff0c;线程执行则封装在NioEventLoop中。 线程调度规则封装在MultithreadEventExecutorGroup的next方法中&#xff0c;这个方法又封装了EventExecutorChooserFactory&#xf…

mysql:查看服务端没有睡眠的线程数量

使用命令show global status like Threads_running;可以查看服务端没有睡眠的线程数量。 例如&#xff1a;

【华为OD机试真题2023CD卷 JAVAJS】加密算法

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 加密算法 知识点DFS搜索 题目描述: 有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下: 1. 明文为一段数字串由0~9组成 2. 密码本为数字0~9组成的二维数组 3. 需要…

Swift 周报 第四十期

文章目录 前言新闻和社区53.5亿美元&#xff01;传苹果今明两年或将采购 2.3 万台 AI 服务器&#xff01;TestFlight 让管理测试员变得更加简单推送通知控制面板现已推出新交付指标Apple Vision Pro 开发者实验室现已扩展到纽约市和悉尼 提案正在审查的提案 Swift论坛推荐博文话…

vue打包内存问题解决办法<--- Last few GCs ---><--- JS stacktrace --->

**<— Last few GCs —> [18484:0000026763669610] 106760 ms: Mark-sweep 4016.0 <— JS stacktrace —> FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory** 解决办法&#xff1a; set NODE_OPTION…

Android 架构 - 组件化

一、概念 组件化是对单个功能进行开发&#xff0c;使得功能可以复用。将多个功能组合起来就是一个业务模块&#xff0c;因此去除了模块间的耦合&#xff0c;使得按业务划分的模块成了可单独运行的业务组件。&#xff08;一定程度上的独立&#xff0c;还是依附于整个项目中&…

watermark-dom 水印不显示

引入watermark-dom 之后&#xff0c;代码也按照文档写好了&#xff0c;也有水印的元素了&#xff0c;但是就是不显示水印 查看元素&#xff0c;发现shadow-root 里面啥也没有 查看源代码发现 shadowRoot 添加水印的这行代码根本没执行 接着往上查&#xff0c;发现没有进入这个…