day7

操作mysql补充:将查询到表的数据写入excel
import pymysql,xlwt
coon=pymysql.connect(host='xxx.24.3.40',user='jxz',password='123456',db='jxz',charset='utf8')     #连接数据库
cur=coon.cursor()
# cur=coon.cursor(cursor=pymysql.cursors.DictCursor)      #指定游标类型,返回的数据是字典
cur.execute('select * from app_student limit 10;')     #执行sql语句
# print(cur.description)       #返回表的信息,类型是二元数组(元素1是字段,其余指的是该字段长度、是否必填等约束信息)
fileds=[ filed[0] for filed in cur.description]      #获取到表所有的字段
data=list(cur.fetchall())      #将二元数组强制转换成list
data.insert(0,fileds)      #增加表字段
book=xlwt.Workbook()
sheet=book.add_sheet('sheet1')
 
# 写数据
# 1、一个一个单元格写,先写第一行的每个单元格
# 2、写每一行的时候,行号是不变的,列在变
# 3、嵌套的循环
方法1:
line=0 #行号
for d in data: #外层循环控制行
    col=0 #列号
    for col_data in d: #内层控制列
        sheet.write(line,col,col_data)
        col+=1
    line+=1
方法2(高端):
for index,line_data in enumerate(data):
    for index2,col_data in enumerate(line_data):
        sheet.write(index,index2,col_data)
 
book.save('user.xls')
cur.close()
coon.close()
 
 
sys模块
import sys
print(sys.argv)      #在命令行运行python文件时(python xx.py).它会把传入的参数都放到这个argv里面;返回的是一个list;
在Python中,通过命令运行如下Python文件:
command=sys.argv
if len(command)>1:
    excle=command[1]
    print('用例已经运行完成',excle)
else:
    print('运行这个python文件的时候,需要传入一个用例名称,例如:'
  'python run_case.py case.xls')
导入模块
导入模块的顺序:
1、先在当前目录下找这个python文件
2、再去python的环境变量里面找这个python文件
导入模块的实质:
1.把这个模块的代码,从头到尾执行一次
print(sys.path)    #查看Python的环境变量
例1:在当前目录,导入当前目录的其他python文件
有一个b.py文件如下:
name= 'haha'
def coon_db():
print('this is a func..')
print('这是最后一段代码')
if __name__ == '__main__': #下面代码为测试代码,在其他Python文件导入这个模块,它不会执行
coon_db('b文件')       #测试代码
在a文件中导入b文件-方法1:
import b   #在a文件里导入b文件
b.coon_db()  #调用b文件里的my函数
print(b.name) #调用b文件里的name变量
在a文件中导入b文件-方法2:
from b import coon_db,name #只导入b文件里的coon_db函数和变量name
coon_db()
print(name)
 
例2:在当前目录,导入其他目录的python文件
1.把要导入模块的目录加入到环境变量里面
import sys
sys.path.append(r'E:\spz\tools')  #加入环境变量,加在最后
sys.path.insert(0,r'E:\spz\tools')   #加入环境变量:加入在指定位置
print(sys.path)    #查看环境变量里面的所有目录
 
操作mongodb
import pymongo
client=pymongo.MongoClient(host='xxx.24.3.40',port=27017) #连接
db=client['ht_spz']#选择数据库,如果这个数据库不存在的话,会帮你创建
collection=db['stu_info']#选择一个集合,相当于mysql里面的表;如果集合不存在,会帮你创建
增:
collection.insert({'name':'nhy','sex':'男'}) #往集合里面插入数据
collection.insert({'url':'http://www.baidu.com','title':'baidu.com','addr':'西二旗'})
查:
方法1:
for d in collection.find({'title':'baidu.com'}):
    print(d)
方法2:
print(list(collection.find({'title':'baidu.com'}))) #查找集合里面,指定数据
print(list(collection.find())) #查找集合里面,所有数据
删:
collection.delete_one({'title':'baidu.com'}) #如果有多条的话,只会删除一条
collection.delete_many({'title':'baidu.com'}) #如果有多条的话,会删除多条
改:
collection.update({'name':'nhy'},{'name':'nhy','addr':'亦庄'})
 
接口开发
1.更好的测试
2.mock(模拟接口)
3.给别人提供数据
import flask
server=flask.Flask(__name__) #启动服务,把当前这个Python文件当做一个服务
@server.route('/login',methods=['get','post'])
def login():
    return 'hahahaha'
server.run(port=8989,debug=True)#启动服务;加上debug=True修改代码之后会自动重启
 
定义1个可以传参的接口(登录接口):
import flask
import json
server=flask.Flask(__name__) #启动服务,把当前这个Python文件当做一个服务
@server.route('/login',methods=['get','post'])
def login():
    #入参是在?后面传参/k-v类型传参:
    username=flask.request.values.get('username') #括号里的username是从客户端发过来的数据
    pwd=flask.request.values.get('password')
    #入参json类型传参:
    json_data=flask.request.json   #获取所有数据
    json_data = flask.request.json.get('username') #获取某个key/value
    #入参有cookie:
    cookie=flask.request.cookies.get('xxx')  #获取cookie
    #入参有headers:
    headers=flask.request.headers.get('xxxx')  #获取headers
    if username == 'nhy' and pwd == '123456':
        res = {'code': 1000, 'msg': '登录成功', 'sign': 'sdfsdf23vsrqsdf'}
    else:
        res = {'code': 2000, 'msg': '账号/密码错误'}
    return json.dumps(res, ensure_ascii=False)
server.run(port=8989,debug=True)#启动服务;加上debug=True修改代码之后会自动重启
 
定义1个注册的接口,并把数据存到mysql里面:
import flask,pymysql
import hashlib
import json
server=flask.Flask(__name__) #启动服务,把当前这个Python文件当做一个服务
 
def my_db(sql,port=3306,charset='utf8'):
ip, user, passwd, db = 'xxx.24.3.40','jxz','123456','jxz'
coon = pymysql.connect(host=ip,user=user,
password=passwd,db=db,
port=port,charset=charset,autocommit=True)
cur = coon.cursor()
sql=sql.strip()
cur.execute(sql)
sql_start = sql[:6].lower()#取sql的开头,转成小写
if sql_start.startswith('select') or sql_start.startswith('show'):
data = cur.fetchall()
else:
data = 'ok'
cur.close()
coon.close()
return data
 
def my_md5(s):
m = hashlib.md5(s.encode())
return m.hexdigest()
 
@server.route('/register',methods=['post'])
def reg():
username = flask.request.values.get("username")
passwd = flask.request.values.get("passwd")
cpasswd = flask.request.values.get("cpasswd")
if username and passwd and cpasswd:
sql1 = 'select * from nhy where name="%s";'%username
sql_res = my_db(sql1)
if sql_res:
res = {'code':2001,'msg':'该用户已经被注册'}
else:
if passwd==cpasswd:#
md5_pwd = my_md5(passwd)
sql2 = 'insert into nhy (name,pwd) value ("%s","%s");'%(username,md5_pwd)
my_db(sql2)
res = {'code':1000,'msg':'注册成功'}
else:
res = {'code':2003,'msg':'两次输入的密码不一致'}
else:
res = {'code':2002,'msg':'必填参数未填,请查看接口文档!'}
return json.dumps(res,ensure_ascii=False)
server.run(port=8989,debug=True) #启动服务
 
程序分目录
1.新建主目录:my_api
2.新建二级目录:bin(运行程序的入口),conf(存放配置文件),lib(存放程序的主逻辑),logs(写日志)
3.新建二级普通文本文件:readme.txt(程序的说明)
4.在conf下新建setting.py,文件如下:
MYSQL_INFO = {
'host':'xxx.24.3.40',
'user':'jxz',
'password':'123456',
'port':3306,
'db':'jxz',
'charset':'utf8',
'autocommit':True
}#数据库配置信息
 
REDIS_INFO ={ }
 
SERVER_PORT = 8989
5.在lib下新建tools.py,文件如下:
import pymysql,hashlib
from conf.setting import MYSQL_INFO
def my_db(sql):
coon = pymysql.connect(**MYSQL_INFO)
#这里用2个星号,就会把字典里面的k和v变成 k=v,只适用于字典
cur = coon.cursor(cursor=pymysql.cursors.DictCursor)
sql=sql.strip()
cur.execute(sql)
sql_start = sql[:6].lower()#取sql的开头,转成小写
if sql_start.startswith('select') or sql_start.startswith('show'):
data = cur.fetchall()
else:
data = 'ok'
cur.close()
coon.close()
return data
 
def my_md5(s):
m = hashlib.md5(s.encode())
return m.hexdigest()
 
def op_redis():
pass
#在pacharm中加环境变量的方法:选择要加入环境变量的目录,右键——Mark Directory as——Sources Root;
6.在lib下新建interface.py(写接口),文件如下:
import flask,json
from lib.tools import my_db,my_md5
 
server = flask.Flask(__name__)
 
@server.route('/login',methods=['get','post'])
def taotao():
username = flask.request.values.get('username')
pwd = flask.request.values.get('password')
if username=='nhy' and pwd=='123456':
res  = {'code':1000,'msg':'登录成功','sign':'sdfsdf23vsrqsdf'}
else:
res = {'code':2000,'msg':'账号/密码错误'}
return json.dumps(res,ensure_ascii=False)
 
@server.route('/register',methods=['post'])
def reg():
username = flask.request.values.get("username")
passwd = flask.request.values.get("passwd")
cpasswd = flask.request.values.get("cpasswd")
if username and passwd and cpasswd:
sql1 = 'select * from nhy where name="%s";'%username
sql_res = my_db(sql1)
if sql_res:
res = {'code':2001,'msg':'该用户已经被注册'}
else:
if passwd==cpasswd:#
md5_pwd = my_md5(passwd)
sql2 = 'insert into nhy (name,pwd) value ("%s","%s");'%(username,md5_pwd)
my_db(sql2)
res = {'code':1000,'msg':'注册成功'}
else:
res = {'code':2003,'msg':'两次输入的密码不一致'}
else:
res = {'code':2002,'msg':'必填参数未填,请查看接口文档!'}
return json.dumps(res,ensure_ascii=False)
7.在bin下新建start.py(运行程序入口),文件如下:
写法1:
from lib.interface import server
from conf.setting import SERVER_PORT
server.run(port=SERVER_PORT,debug=True)#不写host,只能在本地访问
#host写成0.0.0.0就可以同一个局域网里面所有人都能访问了,如:server.run(host='0.0.0.0',port=SERVER_PORT,debug=True)
 
写法2:(不在pacharm中运行,把这些文件拿到别处运行,运行前需手动加环境变量)
import sys
sys.path.insert(0,r'E:\spz\day7\my_api')
from lib.interface import server
from conf.setting import SERVER_PORT
server.run(port=SERVER_PORT,debug=True)
#一定要先加环境变量,再导入
 
写法3(动态加环境变量的方法):
import sys,os
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,base_path)
from lib.interface import server
from conf.setting import SERVER_PORT
server.run(port=SERVER_PORT,debug=True)
#print(__file__)#不管什么时候,__file__都是当前这个python文件的绝对路径
#这里加入环境变量的,通过__file__获取到父目录的父目录
#用abs_paht是因为分隔符不正确
 
读excel
import xlrd   #只能读
book = xlrd.open_workbook('nhy.xls')    #打开excel
# print(book.nsheets)    #获取到excel里面总共有多少个sheet页
sheet = book.sheet_by_index(0)     #获取sheet页:根据索引
#book.sheet_by_name('sheet1')     #获取sheet页:根据名字
print(sheet.cell(0,0).value)    #指定行和列,获取某个单元格里面的内容
print(sheet.cell(1,0).value)
print(sheet.row_values(0))   #获取某一行的数据,0代表获取第1行的数据
print(sheet.row_values(1))   #获取某一行的数据,1代表获取第2行的数据
print(sheet.nrows)      #获取这个excel里面总共有多少行
print(sheet.col_values(0))   #获取某一列的数据,0代表获取第1列的数据
print(sheet.col_values(1))   #某一列的数据,1代表获取第2列的数据
print(sheet.ncols)    #获取这个excel总共有多少列
 
修改excel
1.修改excel要先复制一个excel,再修改
import xlrd
from xlutils import copy
book1 = xlrd.open_workbook('nhy.xls')   #打开原来的excel
new_book = copy.copy(book1)     #拷贝一个新的excel
sheet = new_book.get_sheet(0)    #获取第一个sheet页
sheet.write(1,3,'18')
sheet.write(1,1,'王艳会')
new_book.save('nhy.xls')   #保存excel

转载于:https://www.cnblogs.com/you-shu/p/9357106.html

是这样吗-- ================================================================================================= -- SQL SCRIPT FOR DAILY OUTPUT PLAN PROCESSING -- Description: This script refactors the business logic from '日产出目标.py' into a single, -- comprehensive SQL query. It processes work orders, corrects schedule times based on -- resource constraints, and calculates the daily output plan for the next 7 days. -- Target Table: daily_output_plan_final -- ================================================================================================= -- Step 0.1: Create the final output table if it doesn't exist CREATE TABLE IF NOT EXISTS daily_output_plan_final ( "批次" TEXT NOT NULL, "指令" TEXT, "线体" TEXT, "单板代码" TEXT, "单板名称" TEXT, "计划数量" REAL, "产出数量" REAL, "剩余数量" REAL, "计划开始时间" TEXT, "计划结束时间" TEXT, "实际开始时间" TEXT, "修正后计划开始时间" TEXT, "修正后计划结束时间" TEXT, "主工序" TEXT, "工序序号" INTEGER, "入库工序" TEXT, "入库时间" TEXT, "产品大类" TEXT, "工厂" TEXT, "责任人" TEXT, "day_1_output" REAL, "day_2_output" REAL, "day_3_output" REAL, "day_4_output" REAL, "day_5_output" REAL, "day_6_output" REAL, "day_7_output" REAL ); -- Step 0.2: Clean up the final table before insertion DELETE FROM daily_output_plan_final; -- Step 1: Use a CTE to prepare and pre-calculate data, similar to the initial Python DataFrame setup. WITH PreparedData AS ( SELECT wo.prodplanId AS "批次", wo.workOrderNo AS "指令", wo.lineName AS "线体", wo.itemNo AS "单板代码", wo.itemName AS "单板名称", CAST(wo.taskQty AS REAL) AS "计划数量", wo.scheduleStartDate AS "计划开始时间", wo.scheduleEndDate AS "计划结束时间", wo.actualStartDate AS "实际开始时间", wo.craftSection AS "主工序", wo.order_index AS "顺序号", CAST(wo.remark AS INTEGER) AS "工序序号", CAST(wo.outputQty AS REAL) AS "产出数量", wo.externalType AS "产品大类", wo.factoryName AS "工厂", -- Calculate remaining quantity, ensuring it's not negative MAX(0, CAST(wo.taskQty AS REAL) - CAST(wo.outputQty AS REAL)) AS "剩余数量", -- Merge craft data with defaults for calculation COALESCE(cd.unitPerHour, 60) AS "UPH", COALESCE(cd.operationEfficiency, 1) AS "作业效率", COALESCE(cd.transferTime, 0.5) AS "转机时间", COALESCE(cd.endingTime, 0.5) AS "收尾时间", -- Calculate production time in hours (MAX(0, CAST(wo.taskQty AS REAL) - CAST(wo.outputQty AS REAL)) / NULLIF(COALESCE(cd.unitPerHour, 60) * COALESCE(cd.operationEfficiency, 1), 0)) AS production_time, -- Determine if it's the last operation in the batch to mark for warehousing CASE WHEN wo.remark = MAX(wo.remark) OVER (PARTITION BY wo.prodplanId) THEN '是' ELSE '否' END AS "入库工序" FROM work_orders wo LEFT JOIN craft_data cd ON wo.itemNo = cd.itemNo AND wo.craftSection = cd.mainProcess WHERE -- Filter out completed or near-completed orders (CAST(wo.taskQty AS REAL) > 0 AND (CAST(wo.outputQty AS REAL) / CAST(wo.taskQty AS REAL)) <= 0.9) ), -- Step 2: Rank operations to establish a processing order for the recursive CTE RankedData AS ( SELECT *, -- Rank within the same batch ROW_NUMBER() OVER (PARTITION BY "批次" ORDER BY "工序序号") AS op_rank_in_batch, -- Global rank across all data for sequential processing ROW_NUMBER() OVER (ORDER BY "线体", "批次", "工序序号") AS global_rank, -- Pre-calculate total hours for this operation ("转机时间" + production_time + "收尾时间") AS total_hours FROM PreparedData ), -- Step 3: Recursive CTE to correct schedule times, simulating the Python loop CorrectedSchedule AS ( -- Anchor Member: Start with the first operation (global_rank = 1) SELECT rd.global_rank, rd."批次", rd."线体", rd."单板代码", rd."主工序", rd.op_rank_in_batch, rd.total_hours, -- Determine the initial start time COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')) AS corrected_start_time, -- Calculate the initial end time STRFTIME('%Y-%m-%d %H:%M:%S', COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), '+' || rd.total_hours || ' hours') AS corrected_end_time, -- Initialize resource last-end-time trackers CASE WHEN rd."主工序" <> 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), '+' || rd.total_hours || ' hours') ELSE NULL END AS line_last_end, CASE WHEN rd."主工序" = 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), '+' || rd.total_hours || ' hours') ELSE NULL END AS item_test_last_end FROM RankedData rd WHERE rd.global_rank = 1 UNION ALL -- Recursive Member: Process subsequent operations one by one SELECT rd.global_rank, rd."批次", rd."线体", rd."单板代码", rd."主工序", rd.op_rank_in_batch, rd.total_hours, -- Determine the corrected start time based on dependencies ( SELECT MAX(ts) FROM ( -- Dependency 1: Previous operation in the same batch SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL -- Dependency 2: Resource availability (line or test) SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL -- Dependency 3: Its own original start time (or now if null) SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')) ) AS times(ts) ) AS corrected_start_time, -- Calculate the new end time based on the corrected start time STRFTIME('%Y-%m-%d %H:%M:%S', (SELECT MAX(ts) FROM ( SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime')) ) AS times(ts)), '+' || rd.total_hours || ' hours' ) AS corrected_end_time, -- Update resource trackers for the next iteration CASE WHEN rd."主工序" <> 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', (SELECT MAX(ts) FROM (SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))) AS times(ts)), '+' || rd.total_hours || ' hours') ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END, CASE WHEN rd."主工序" = 'Test' THEN STRFTIME('%Y-%m-%d %H:%M:%S', (SELECT MAX(ts) FROM (SELECT cs.corrected_end_time FROM CorrectedSchedule cs WHERE cs."批次" = rd."批次" AND cs.op_rank_in_batch = rd.op_rank_in_batch - 1 UNION ALL SELECT CASE WHEN rd."主工序" = 'Test' THEN (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") ELSE (SELECT MAX(cs2.line_last_end) FROM CorrectedSchedule cs2 WHERE cs2."线体" = rd."线体") END UNION ALL SELECT COALESCE(rd."实际开始时间", rd."计划开始时间", STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime'))) AS times(ts)), '+' || rd.total_hours || ' hours') ELSE (SELECT MAX(cs2.item_test_last_end) FROM CorrectedSchedule cs2 WHERE cs2."单板代码" = rd."单板代码") END FROM RankedData rd JOIN CorrectedSchedule cs ON rd.global_rank = cs.global_rank + 1 ), -- Step 4: Combine final schedule with other data and calculate daily outputs -- 修改FinalData:增加实际生产开始时间和计算生产持续时间 FinalData AS ( SELECT rd.*, cs.corrected_start_time, cs.corrected_end_time, -- 计算实际生产开始时间(取当前时间或修正后开始时间中较晚者) MAX(STRFTIME('%Y-%m-%d %H:%M:%S', 'now', 'localtime'), cs.corrected_start_time) AS actual_production_start, -- 计算生产持续时间(分钟) (JULIANDAY(cs.corrected_end_time) - JULIANDAY(cs.corrected_start_time)) * 24 * 60 AS total_duration_minutes, CASE WHEN rd."入库工序" = '是' THEN DATE(cs.corrected_end_time) ELSE NULL END AS "入库时间" FROM RankedData rd JOIN CorrectedSchedule cs ON rd.global_rank = cs.global_rank ), -- 重新设计每日产出计算 DailyOutputCalculation AS ( SELECT f.*, (SELECT "计调员" FROM part_category pc WHERE pc."单板代码" LIKE f."单板代码" || '%' AND pc."工厂" = f."工厂" LIMIT 1) AS "责任人", -- 计算每天的生产时间比例和产出 -- Day 1: 今天剩余时间 CASE WHEN f."入库工序" = '是' THEN ROUND(f."剩余数量" * (MAX(0, MIN(JULIANDAY(DATE('now', '+1 day')), JULIANDAY(f.corrected_end_time)) - MAX(JULIANDAY(f.actual_production_start), JULIANDAY('now'))) / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.actual_production_start))) ELSE 0 END AS day_1_output, -- Day 2: 完整的一天 CASE WHEN f."入库工序" = '是' THEN ROUND(f."剩余数量" * (MAX(0, MIN(JULIANDAY(DATE('now', '+2 day')), JULIANDAY(f.corrected_end_time)) - MAX(JULIANDAY(f.actual_production_start), JULIANDAY(DATE('now', '+1 day')))) / (JULIANDAY(f.corrected_end_time) - JULIANDAY(f.actual_production_start))) ELSE 0 END AS day_2_output, -- 重复相同逻辑计算day3-day7... ... FROM FinalData f ) -- Final Step: Insert the processed data into the permanent table INSERT INTO daily_output_plan_final ( "批次", "指令", "线体", "单板代码", "单板名称", "计划数量", "产出数量", "剩余数量", "计划开始时间", "计划结束时间", "实际开始时间", "修正后计划开始时间", "修正后计划结束时间", "主工序", "工序序号", "入库工序", "入库时间", "产品大类", "工厂", "责任人", "day_1_output", "day_2_output", "day_3_output", "day_4_output", "day_5_output", "day_6_output", "day_7_output" ) SELECT "批次", "指令", "线体", "单板代码", "单板名称", "计划数量", "产出数量", "剩余数量", "计划开始时间", "计划结束时间", "实际开始时间", corrected_start_time AS "修正后计划开始时间", corrected_end_time AS "修正后计划结束时间", "主工序", "工序序号", "入库工序", "入库时间", "产品大类", "工厂", "责任人", day_1_output, day_2_output, day_3_output, day_4_output, day_5_output, day_6_output, day_7_output FROM DailyOutputCalculation;
08-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值