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 = """
select
    area.province,  -- 省份名称
    chains.chain_num,  -- 门店数量
    store.store_num,  -- 店铺数量
    curdate() collect_time  -- 统计时间
from (
    select
    area_id,
    area_name as province
    from shopnc_db.shopnc_area
    where area_id < 32
) area
left join (
    select
        areaid_1,
        count(distinct chain_id) as chain_num
    from shopnc_db.uc_chain
    where is_auth = 1
    and 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 (
    select
        areaid_1,
        count(distinct store_id) as store_num
    from shopnc_db.uc_store
    where is_auth = 1
    and 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:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ardupilot开发 --- 风机不停机巡检 篇

在哪里创建的siyi实例&#xff1f; 如何传递飞控的时间戳给siyi相机&#xff1f; AP_RTC_ENABLED在waf编译时配置为1&#xff1f;&#xff1f; 如何配置&#xff1f; 在lua脚本中如何获取这个时间AP::rtc().get_utc_usec(utc_usec)&#xff1f;&#xff1f;&#xff1f; inclu…

FPC柔性排线用什么胶水能固定到线路板上?

为了固定FPC柔性排线到线路板上&#xff0c;可以使用特殊用于电子组装的胶水。常用的胶水类型有&#xff1a; 1.氰基丙烯酸酯胶水&#xff08;Cyanoacrylate&#xff09; 被称为“超级胶水”或“快干胶水”。这种胶水对FPC通常有很好的附着力。 2.环氧树脂胶水 环氧树脂胶水…

c 试水解码jpeg图片比特流

找到一张采用霍夫曼通用DC,AC编码表的图片&#xff0c;提取出此图片的比特流准备对它解码&#xff0c;再反推怎样编码。 下图是此图片比特流前100个字节。解码是每次读一字节&#xff0c;对这8比特解码&#xff0c;如8比特不能解码&#xff0c;再读入一字节。因为霍夫曼表最多…

html/css实现简易圣诞贺卡

一、前言 HTML&#xff0c;全称HyperText Markup Language&#xff0c;即超文本标记语言&#xff0c;是用于创建网页的标准标记语言。HTML是一种标记语言&#xff0c;由一系列的元素标签组成&#xff0c;用于描述网页的结构和内容。 CSS&#xff0c;全称是“层叠样式表”&#…

Solon 开源框架,单月下载突破 250 万!!!

Solon 是什么开源项目&#xff1f; 一个&#xff0c;Java 生态型应用开发框架。它从零开始构建&#xff0c;有自己的标准规范与开放生态&#xff08;历时六年&#xff0c;已有全球第二级别的生态规模&#xff09;。与其他框架相比&#xff0c;它解决了两个重要的痛点&#xff…

linux下的进程组与会话的区别

进程组&#xff08;Process Group&#xff09;和会话&#xff08;Session&#xff09;是Unix/Linux操作系统中的两个概念&#xff0c;它们之间有一些关键区别&#xff1a; 定义和范围&#xff1a;一个进程组是一组相关进程的集合&#xff0c;它们具有相同的进程组ID&#xff08…

变分自动编码器【03/3】:使用 Docker 和 Bash 脚本进行超参数调整

一、说明 在深入研究第 1 部分中的介绍和实现&#xff0c;并在第 2 部分中探索训练过程之后&#xff0c;我们现在将重点转向在第 3 部分中通过超参数调整来优化模型的性能。要访问本系列的完整代码&#xff0c;请访问我们的 GitHub 存储库在GitHub - asokraju/ImageAutoEncoder…

最新国内免费使用GPT4教程,GPT语音对话使用,Midjourney绘画

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和用户进行创作交流。 然而&#xff0c;GP…

JS模块化规范之ES6及UMD

JS模块化规范之ES6及总结 前言ES6模块化概念基本使用ES6实现 UMD(Universal Module Definition)总结 前言 ESM在模块之间的依赖关系是高度确定的&#xff0c;与运行状态无关&#xff0c;编译工具只需要对ESM模块做静态分析&#xff0c;就可以从代码字面中推断出哪些模块值未曾被…

在 Windows 上恢复已删除文件的 9 种简单方法

本教程讨论永久丢失数据的原因以及在 Windows上恢复已删除文件的不同方法&#xff1a; 数据是提供给系统的任何形式的信息。它可以是从密码到记事本文件的任何内容。数据是当今世界的关键要素&#xff0c;因为它使我们的生活变得轻松。 我们每天都变得越来越依赖数据&#xf…

括号匹配问题

括号匹配问题是一个在算法和数据结构中常见的问题&#xff0c;主要目标是通过检查输入的括号序列是否平衡和闭合&#xff0c;以确定它们是否匹配。这涉及到各种类型的括号&#xff0c;如圆括号、花括号和大括号。 解决括号匹配问题的一种常见方法是使用栈。当遇到一个左括号时…

大语言模型(LLM)与 Jupyter 连接起来了!

现在&#xff0c;大语言模型&#xff08;LLM&#xff09;与 Jupyter 连接起来了&#xff01; 这主要归功于一个名叫 Jupyter AI 的项目&#xff0c;它是官方支持的 Project Jupyter 子项目。目前该项目已经完全开源&#xff0c;其连接的模型主要来自 AI21、Anthropic、AWS、Co…

探索鸿蒙:了解华为鸿蒙操作系统的基础课程

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习产出&#xff1a; 介绍鸿蒙操作系统的起源和发展历程。 理解鸿蒙操作系统的核心概念和体系结构。 学习如何搭建和配置鸿蒙开发环境。 掌握基础的鸿蒙应用开发技术&#xff0c;包括应用的创建、…

别再犹豫!一键下载安装Substance3D,在数字世界中创造引人注目的艺术品!

不要再在网上浪费时间寻找Substance3D的安装包了&#xff0c;一键下载安装&#xff0c;你要的一切都可以在这里找到&#xff01; 对于那些热衷于数字艺术和建模的人来说&#xff0c;Substance3D是一个不可或缺的工具。然而&#xff0c;在网上寻找合法且可靠的软件安装包却常常…

微信开发工具修改编译一直报Cannot read property ‘call‘ of undefined?

我个人的解决方法 更新HbuilderX和微信小程序开发者工具到最新版&#xff0c;微信开发者工具-设置-本地设置-调试基础库也换成最新的3.2.4&#xff0c;打开又报错&#xff0c; 把manifest.json文件内的 “mp-weixin” : {“libVersion”: “latest”}配置上就好了 如果不能解…

【数据结构】图的创建(邻接矩阵,邻接表)以及深度广度遍历(BFS,DFS)

文章目录 前言1.图的存储结构1.邻接矩阵2.邻接表 一、邻接矩阵二、邻接表二、图的遍历1.DFS2.BFS 前言 图是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E)&#xff0c;其中&#xff1a; 顶点集合V {x|x属于某个数据对象集}是有穷非空集合&…

PIC单片机项目(8)——基于PIC16F877A的温度光照检测装置的protues仿真

1.功能设计 使用PIC16F877A单片机&#xff0c;进行温度检测、光照检测。温度使用的是DS18B20&#xff0c;光照检测直接利用的AD转换。 光照太暗就开灯&#xff0c;温度太高就开风扇。温度阈值和光照阈值都实时显示在LCD1602屏幕上面。 完成了protues仿真。文件里面包含代码和仿…

聚观早报 |字节跳动今年销售额超腾讯;PS5游戏机全球销量

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 12月22日消息 字节跳动今年销售额超腾讯 PS5游戏机全球销量 华为nova 12 Pro参数曝光 抖音电商“焕新非遗”落地…

【Python】函数进阶

一、函数多返回值 二、函数多种传参方式 三、匿名函数 一、函数多返回值 函数如何返回多个返回值 多个返回值 二、函数多种传参方式 函数参数种类 使用方式上的不同, 函数有4中常见参数使用方式: 位置参数关键字参数不定长参数缺省参数 位置参数 关键字参数 缺省参数 不…