Python 链接数据库查询数据并且进行分析

240 阅读2分钟

查询油站油价信息,根据油站的信息推算不同优惠金额的折扣方式或其他优惠方式,以及带来的利润

根据订单表现,推算目前优惠力度是否合理

首先第一步,连接数据库并查询基础数据 引用pymysql 利用pymysql.connect 创建连接,连接数据库,需要参数(host/user/password/database),database非必须 自定义函数或变量定义连接

import pymysql 

conn_price = pymysql.connect(
    host='rr-test',
    user='abc',
    password="123"
    )
    
cur_price = conn_price.cursor() /*利用连接创建游标,后续的操作在游标上进行*/

cur_price.execute(
    'select gas_id,gas_name,sku_id,gun_price,settlement_price,visitor_price from price where yn=1'
    ) /*利用游标执行SQL查询*/

a = cur_price.fetchone()/*获取查询的数据,此处的数据来源于游标中执行的SQL*/

print(a)

测试完毕,数据连接成功,基础字段获取完成;

第二步,获取数据后分析处理

import numpy as np
gun_price = 7.3
vis_price = 6.16

def price_fun(gun_price,vis_price):
    for m in  np.arange(0.5,0.9,0.1):
        for p in np.arange(0,0.02,0.005):
            n =((((vis_price *(200 / gun_price))*(1+p) ) - (10 * gun_price * m)  ) / ( (200 / gun_price) - 10 )) - gun_price
            print("折扣是:{0},利润率为:{1},加{2}".format(m,p,round(n,4)))

res = price_fun(gun_price,vis_price)

print(res)

结合以上两步:

import pymysql
import numpy as np

# 连接数据库
conn_price = pymysql.connect(
    host='---',
    user='---',
    password="---"
    )
# 创建游标
cur_price = conn_price.cursor()
# 创建游标内SQL查询内容
cur_price.execute(
    '''select gas_id,gas_name,sku_id,gun_price,settlement_price,visitor_price from czb_price_rule.price where yn=1'''
    )
# 获取数据
data_price = cur_price.fetchall()

m1 = float(input(("折扣最低为:")))
m2 = float(input(("折扣最高为:")))
m3 = float(input(("折扣计算步长为:")))

p1 = float(input(("利润率最低为:")))
p2 = float(input(("利润率最高为:")))
p3 = float(input(("利润率计算步长为:")))


# 定义计算函数
def price_fun(v,g):
    for m in np.arange(m1,m2,m3):
        for p in np.arange(p1,p2,p3):
            n =((((vis_price *(200 / gun_price))*(1+p) ) - (10 * gun_price * m)  ) / ( (200 / gun_price) - 10 )) - gun_price
            pro = 1 - (((( (200/gun_price)-10) * (gun_price + n)) + (10 * gun_price * m) ) / 200)
            rebate = 1 - (vis_price/gun_price)
            print("当前让利为{4},当折扣是:{0},利润率为:{1}的情况下,枪价加{2},用户优惠百分之{3},".format(round(m,1), p, round(n, 4),round(pro,2),round(rebate,2)))


# 循环取出每个油站枪价,访客价信息
for o in range(len(data_price)):
    gas_name = str(data_price[o][1])
    vis_price = float(data_price[o][5])
    gun_price = float(data_price[o][3])
    print("油站是:{0}".format(gas_name))
    res = price_fun(vis_price,gun_price)

以上可以自定义折扣与利润的关系自动计算结果并遍历打印,下一步研究根据订单变化推算当前最优解。