这里的补货指:从仓储区补充商品到拣选区
首先,连接数据库,根据不同的数据库类型,我们需要下载相关的驱动并设定路径,这点可以查看驱动官网进行设置,这里我用Oracle进行举例:
import cx_Oracle#导入连接模块
def connection_to_Db(username,password,url):#定义连接函数,需要3个参数:用户名,密码和数据库服务器地址
try:
myconn = cx_Oracle.connect(username,password,url)
print('Connecting to DB Successfully')
return myconn
except BaseException:
print(BaseException)
return None
然后,编写相对应的'Sql脚本'以及'列名列表'(原因在后面),比如:
part_sql="select a,b,c from db"#这里用双引号,因为Sql脚本中可能会含有单引号,用双引号与单引号进行区分
part_columns_name=['商品代码','商品数量','当前库位']
我们写好相应的Sql脚本及其对应列名列表之后,就可以编写提取数据的函数了:
import pandas as pd
def get_Info(myconn,part_sql,part_columns_name):#共3个参数,'连接对象','Sql脚本'以及'列名列表'
mycursor = myconn.cursor()#获取游标
mycursor.execute(part_sql)#执行Sql
info = mycursor.fetchall()#获取执行Sql后的所有返回信息
info = pd.DataFrame(info,columns=part_columns_name)#将信息转化为Pandas的DataFrame格式
mycursor.close()#关闭游标
return info#返回数据
上面我引用了Pandas模块,这是非常优秀的数据处理模块,建议读者去看《利用Pandas进行数据分析》一书,是Pandas模块的作者写的
当我们获取了我们需要的信息比如:商品信息、库位信息、订单信息等之后,我们需要对这些信息做一些修改、标记等处理,这里我介绍一些我常用的函数和方法:
字符串切片:df['商品前缀']=df['商品代码'].str.slice(0,1)#将第一个数字或字母提取为一列,效果等于Excel的LEFT,RIGHT函数
映射:df['商品类型']=df['商品前缀'].map({p:'食品类',s:'服饰类',c:'包包类'})#将特殊意义的数字、符号、字符转化为描述,效果等于Excel的???此处遗忘了
分列:df['商品生产日期']=df['商品代码'].str.split('_')[2]#用下横杠分列,取第3个对象,效果等同于Excel中的分列操作,但是更加灵活
apply函数:def good_or_bad(x):if x >100: return 'GOOD' else: return 'BAD'
df['商品销量好不好']=df.apply(lambda dfx:good_or_bad(dfx['商品销量']),axis=1)#可以将复杂的函数应用于每列中的每一行数据
先写到这