闽公网安备 35020302035485号
4.订单表里面存了用户付款的商品信息。
-- ----------------------------
-- 堆代码 duidaima.com
-- 订单表结构
-- ----------------------------
DROP TABLE IF EXISTS `dingdan`;
CREATE TABLE `dingdan` (
`d_id` int(11) NOT NULL,
`UPC` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`d_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- 插入订单测试数据
-- ----------------------------
INSERT INTO `dingdan` VALUES (1, '6972470560664');
INSERT INTO `dingdan` VALUES (2, '6972470560664');
INSERT INTO `dingdan` VALUES (3, '6972470561227');
INSERT INTO `dingdan` VALUES (4, '6972470561890');
INSERT INTO `dingdan` VALUES (5, '6972470561906');
SET FOREIGN_KEY_CHECKS = 1;
-- ----------------------------
-- 商品表结构
-- ----------------------------
DROP TABLE IF EXISTS `shangpin`;
CREATE TABLE `shangpin` (
`UPC` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`商品` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`UPC`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- 插入测试商品数据
-- ----------------------------
INSERT INTO `shangpin` VALUES ('6972470560657', 'A');
INSERT INTO `shangpin` VALUES ('6972470560664', 'A');
INSERT INTO `shangpin` VALUES ('6972470561210', 'D');
INSERT INTO `shangpin` VALUES ('6972470561227', 'B');
INSERT INTO `shangpin` VALUES ('6972470561890', 'C');
INSERT INTO `shangpin` VALUES ('6972470651791', 'B');
SET FOREIGN_KEY_CHECKS = 1;
-- 搜索未下单的商品信息 SELECT *, if(bb.UPC IS NULL,'未下单', '下单') as 下单情况 FROM shangpin aa LEFT JOIN dingdan bb ON aa.UPC = bb.UPC得到以下查询结果:

import pymysql #导入PyMySQL库
import datetime
import warnings
import pandas as pd
import matplotlib.pyplot as plt
warnings.filterwarnings('ignore')
# 堆代码 duidaima.com
# 1. 连接数据库,创建连接对象 db
# 连接对象作用是:连接数据库、发送数据库信息、处理回滚操作(查询中断时,数据库回到最初状态)、
# 创建新的光标对象
def connect_database(database, password):
db = pymysql.connect(host ="localhost", #host属性
user ="sys", #用户名
password = password, #此处填登录数据库的密码
database = database, #数据库名
charset="utf8" # 如果中文显示乱码,则需要添加charset = "utf8"
)
return db
def read_data(db):
# 2. 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 3. 利用MySQL语句查找数据并转化为FrameData(包含列名)
try:
# 使用 execute() 方法执行 SQL 查询
mysql = "SELECT *, if(bb.UPC IS NULL,'未下单', '下单') as 下单情况 FROM shangpin aa LEFT JOIN dingdan bb ON aa.UPC = bb.UPC" # SQL语句
cursor.execute(mysql)
data = cursor.fetchall()
# 下面为将获取的数据转化为 dataframe 格式
columnDes = cursor.description #获取连接对象的描述信息
#print("cursor.description中的内容:",columnDes)
columnNames = [columnDes[i][0] for i in range(len(columnDes))] #获取列名
df = pd.DataFrame([list(i) for i in data],columns=columnNames) #得到的data为二维元组,逐行取出,转化为列表,再转化为df
print(df)
"""
db.commit()若对数据库进行了修改,需进行提交之后再关闭
"""
# 提交到数据库执行
#db.commit()
#print("OK")
except:
# 如果发生错误则回滚
db.rollback()
print("失败")
"""
使用完成之后需关闭游标和数据库连接,减少资源占用,cursor.close(),db.close()
db.commit()若对数据库进行了修改,需进行提交之后再关闭
"""
# 关闭数据库连接
cursor.close()
db.close()
return df
(3) 做定时任务 ## 定时任务
import time
from apscheduler.schedulers.blocking import BlockingScheduler
def job():
dt = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
print('{} --- {}'.format(text, t))
database = 'sys' #数据库名称
password = 'sys' #数据库用户密码
db = connect_database(database, password)
data_sp = read_data(db)
data_sp.to_excel('../data/data_ans.xlsx', sheet_name='未下单情况')
scheduler = BlockingScheduler()
# 在每天22和23点的25分,运行一次 job 方法
scheduler.add_job(job, 'cron', hour='22-23', minute='25')
scheduler.start()
## 测试
# 执行任务
def time_printer():
# 输出时间
now = datetime.datetime.now()
ts = now.strftime('%Y-%m-%d %H:%M:%S')
print('do func time :', ts)
# 定时任务
def loop_monitor():
while True:
time.sleep(20) # 暂停20秒
if __name__ == "__main__":
loop_monitor()
.打开data_ans的excel文件即可查看数据。import pandas as pd
def taskTime():
## 1. 分别导入2个表的数据
product = pd.read_excel('d:/python_code/crontab/data/taskdata.xlsx', sheet_name='商品') # 换成自己的路径和sheet名称
order = pd.read_excel('d:/python_code/crontab/data/taskdata.xlsx', sheet_name='订单')
## 2. 抽取数据
product=product.rename(columns={'UPC':'ID'}) # 对商品表里面的UPC重命名未ID(为了保留订单表里面的CPU着一列)
PO=pd.merge(product,order,left_on='ID', right_on='UPC',how='left') # 左连接抽取数据
PO.loc[pd.isnull(PO['UPC']), '下单情况'] = '未下单' # 找到选中但是未下单的数据标注为未下单
PO['下单情况'] = PO['下单情况'].fillna(value='下单') # 找到下单的数据,在'下单情况'这一列中标注为下单
## 3. 以excel的形式导出查询好的数据
PO = PO.loc[:, ['ID', 'UPC', '下单情况', '产品名称E', '产品参数C', '价格', '建议零售价','订单日期', '品牌', 'PO#', 'SKU','配置', '单价', '数量', '销售金额', '成本单价', '成本', '成本价含税/未税']] # 按列名导出需要的数据
PO.to_excel('d:/python_code/crontab/data/data_python.xlsx', sheet_name='未下单情况') # 导出excel表
return PO
if __name__ == "__main__":
taskTime()
print('执行成功')
(2) 定时处理 ## 2. 定时处理
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
def job():
now = datetime.datetime.now()
ts = now.strftime('%Y-%m-%d %H:%M:%S')
print('执行时间 :', ts) # 输出时间
taskTime() # 执行代码
scheduler = BlockingScheduler() ## 定时
# 在每天17和23点的25分,运行一次 job 方法
scheduler.add_job(job, 'cron', hour='17-23', minute='22')
scheduler.start()
.打开data_python的excel文件即可查看数据。python d:\python_code\crontab\code\test.py见下图

python 路径\文件名.py

