mdbq 3.7.21__py3-none-any.whl → 3.7.23__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,7 +22,7 @@ import sys
22
22
 
23
23
  """
24
24
 
25
- content = config.read_config(file_path=os.path.join(os.path.realpath(os.path.dirname(sys.argv[0])), 'spd.ini'))
25
+ content = config.read_config(file_path=os.path.join(os.path.realpath(os.path.dirname(sys.argv[0])), 'spd.txt'))
26
26
  username, password, host, port = content['username'], content['password'], content['host'], content['port']
27
27
  m_engine = mysql.MysqlUpload(username=username, password=password, host=host, port=port, charset='utf8mb4')
28
28
 
@@ -1011,6 +1011,43 @@ class MysqlDatasQuery:
1011
1011
  )
1012
1012
  return True
1013
1013
 
1014
+ def tg_cjzb_qzt(self, is_maximize=True):
1015
+ start_date, end_date = self.months_data(num=self.months)
1016
+ projection = {
1017
+ '日期': 1,
1018
+ '场景名字': 1,
1019
+ '计划id': 1,
1020
+ '全站花费': 1,
1021
+ '全站观看次数': 1,
1022
+ '全站宝贝点击量': 1,
1023
+ '全站成交金额': 1,
1024
+ '全站成交笔数': 1,
1025
+ '店铺名称': 1,
1026
+ }
1027
+ __res = []
1028
+ for year in range(2025, datetime.datetime.today().year + 1):
1029
+ df = self.download.data_to_df(
1030
+ db_name='推广数据2',
1031
+ table_name=f'超级直播_全站推广报表_{year}',
1032
+ start_date=start_date,
1033
+ end_date=end_date,
1034
+ projection=projection,
1035
+ )
1036
+ __res.append(df)
1037
+ df = pd.concat(__res, ignore_index=True)
1038
+ if len(df) == 0:
1039
+ return pd.DataFrame()
1040
+ # 这里的重命名要注意,因为 tg_cjzb 函数还要重命名一次,注意改为 tg_cjzb 命名前的列名
1041
+ df.rename(columns={
1042
+ '全站花费': '花费',
1043
+ '全站观看次数': '观看次数',
1044
+ '全站宝贝点击量': '点击量',
1045
+ '全站成交金额': '总成交金额',
1046
+ '全站成交笔数': '总成交笔数'
1047
+ }, inplace=True)
1048
+ return df
1049
+
1050
+
1014
1051
  @try_except
1015
1052
  def tg_cjzb(self, db_name='聚合数据', table_name='天猫_超级直播', is_maximize=True):
1016
1053
  start_date, end_date = self.months_data(num=self.months)
@@ -1042,6 +1079,13 @@ class MysqlDatasQuery:
1042
1079
  )
1043
1080
  __res.append(df)
1044
1081
  df = pd.concat(__res, ignore_index=True)
1082
+ cjzb_qzt = self.tg_cjzb_qzt(is_maximize=True)
1083
+ if len(cjzb_qzt) > 0:
1084
+ for col in df.columns.tolist():
1085
+ if col not in cjzb_qzt.columns.tolist():
1086
+ cjzb_qzt[col] = 0
1087
+ df = pd.concat([df, cjzb_qzt], ignore_index=True)
1088
+
1045
1089
  df.rename(columns={
1046
1090
  '观看次数': '观看次数',
1047
1091
  '总购物车数': '加购量',
@@ -1062,6 +1106,7 @@ class MysqlDatasQuery:
1062
1106
  '观看次数': 'int64',
1063
1107
  }, errors='raise')
1064
1108
  df = df[df['花费'] > 0]
1109
+ df['日期'] = pd.to_datetime(df['日期'], format='%Y-%m-%d', errors='ignore') # 转换日期列
1065
1110
  if is_maximize:
1066
1111
  df = df.groupby(['日期', '店铺名称', '营销场景', '人群名字', '计划名字', '花费', '观看次数'],
1067
1112
  as_index=False).agg(
@@ -1121,6 +1166,7 @@ class MysqlDatasQuery:
1121
1166
  max_date = df['日期'].max()
1122
1167
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
1123
1168
  logger.info(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
1169
+
1124
1170
  m_engine.df_to_mysql(
1125
1171
  df=df,
1126
1172
  db_name=db_name,
@@ -3859,10 +3905,14 @@ def test():
3859
3905
  sdq.spph(db_name='聚合数据', table_name='天猫_商品排行')
3860
3906
 
3861
3907
  if __name__ == '__main__':
3862
- main(
3863
- days=150, # 清理聚合数据的日期长度
3864
- months=3 # 生成聚合数据的长度
3865
- )
3908
+ # main(
3909
+ # days=150, # 清理聚合数据的日期长度
3910
+ # months=3 # 生成聚合数据的长度
3911
+ # )
3912
+
3913
+ sdq = MysqlDatasQuery() # 实例化数据处理类
3914
+ sdq.months = 2
3915
+ sdq.tg_cjzb(db_name='聚合数据', table_name='天猫_超级直播')
3866
3916
 
3867
3917
 
3868
3918
 
mdbq/config/config.py CHANGED
@@ -31,7 +31,7 @@ def write_config(file_path, rewrite):
31
31
  """
32
32
  更新配置文件中的键值对,保留注释和其他内容,修复等号空格问题
33
33
  示例:
34
- write_config('spd.ini', {'is_spider': True})
34
+ write_config('spd.txt', {'is_spider': True})
35
35
  """
36
36
  # 读取所有行到内存
37
37
  try:
@@ -89,7 +89,7 @@ def write_config(file_path, rewrite):
89
89
 
90
90
 
91
91
  if __name__ == '__main__':
92
- res = read_config('/Users/xigua/数据中心2/spider/spd.ini')
92
+ res = read_config('/Users/xigua/数据中心2/spider/spd.txt')
93
93
  print(res)
94
- # write_config('spd.ini', {'is_spider': False})
94
+ # write_config('spd.txt', {'is_spider': False})
95
95
 
@@ -46,7 +46,7 @@ upload_path = os.path.join(D_PATH, '数据上传中心') # 此目录位于下
46
46
  if not os.path.exists(upload_path): # 数据中心根目录
47
47
  os.makedirs(upload_path)
48
48
 
49
- content = config.read_config(file_path=os.path.join(os.path.realpath(os.path.dirname(sys.argv[0])), 'spd.cnf'))
49
+ content = config.read_config(file_path=os.path.join(os.path.realpath(os.path.dirname(sys.argv[0])), 'spd.txt'))
50
50
  username, password, host, port = content['username'], content['password'], content['host'], content['port']
51
51
  m_engine = mysql.MysqlUpload(username=username, password=password, host=host, port=port, charset='utf8mb4')
52
52
 
@@ -1,11 +1,17 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 3.7.21
3
+ Version: 3.7.23
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
7
7
  License: MIT
8
8
  Requires-Python: >=3.6
9
+ Dynamic: author
10
+ Dynamic: author-email
11
+ Dynamic: description
12
+ Dynamic: home-page
13
+ Dynamic: license
14
+ Dynamic: requires-python
9
15
 
10
16
 
11
17
  世界上最庄严的问题:我能做什么好事?
@@ -2,14 +2,11 @@ mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
2
  mdbq/__version__.py,sha256=y9Mp_8x0BCZSHsdLT_q5tX9wZwd5QgqrSIENLrb6vXA,62
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
4
  mdbq/aggregation/optimize_data_bak.py,sha256=wB7prQdZAHyjzXH9V8g8X_JBMdvCCUITN1hVwK72Tdg,952
5
- mdbq/aggregation/query_data.py,sha256=D05M1-l4b41AzGLT32svOhCjcPGlIm3n2NTh0nTzHGU,174306
5
+ mdbq/aggregation/query_data.py,sha256=wOngHgsU7nFiz6PkrXz0eb5g4m4nc5m4_yJslR5XOWk,176294
6
6
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
7
7
  mdbq/bdup/bdup.py,sha256=hJs815hGFwm_X5bP2i9XugG2w2ZY_F0n3-Q0hVpIPPw,4892
8
8
  mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
9
- mdbq/config/config.py,sha256=bBlol__JA6VK-dEGEwOBTX1F3XqHgOff96W4hfbzVUE,3170
10
- mdbq/config/default_bak.py,sha256=pOBmlxmGzmK8XYstv_qwE4vDwJmytEmVIYE0bDnCXOs,2143
11
- mdbq/config/myconfig_bak.py,sha256=5gg3B8fnDx2_a5I3kfPLXx7xePqZwfb3ohj6iMVhplc,1022
12
- mdbq/config/products_bak.py,sha256=kWN3NWp9uT6D0M4Vw33yqOo9Tb98hEO8-X-llRjoY8M,5731
9
+ mdbq/config/config.py,sha256=eaTfrfXQ65xLqjr5I8-HkZd_jEY1JkGinEgv3TSLeoQ,3170
13
10
  mdbq/config/set_support.py,sha256=7C7NFy7Em_uC7lig54qQlIlKG_AJeMCskxzK87anGkM,462
14
11
  mdbq/dataframe/__init__.py,sha256=2HtCN8AdRj53teXDqzysC1h8aPL-mMFy561ESmhehGQ,22
15
12
  mdbq/dataframe/converter.py,sha256=lETYhT7KXlWzWwqguqhk6vI6kj4rnOBEW1lhqKy2Abc,5035
@@ -22,7 +19,7 @@ mdbq/mysql/mysql.py,sha256=UoZPVyrgDp5L8-i0jVptkal9G64oNrdhNwa-xpp8txo,95127
22
19
  mdbq/mysql/s_query.py,sha256=09Dp7DrVXui6dAI6zFDfrsUOdjPblF_oYUpgqbZMhXg,8757
23
20
  mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
24
21
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
25
- mdbq/other/download_sku_picture.py,sha256=Ttge8kX0nz63yX8351Pz49fEXTKPhScFKjOyv1SSRfY,44798
22
+ mdbq/other/download_sku_picture.py,sha256=-rfWRmmsNjj0AyPZHT_xAaIaoMqcCyeppU6j81XFQYw,44798
26
23
  mdbq/other/porxy.py,sha256=UHfgEyXugogvXgsG68a7QouUCKaohTKKkI4RN-kYSdQ,4961
27
24
  mdbq/other/pov_city.py,sha256=AEOmCOzOwyjHi9LLZWPKi6DUuSC-_M163664I52u9qw,21050
28
25
  mdbq/other/ua_sj.py,sha256=JuVYzc_5QZ9s_oQSrTHVKkQv4S_7-CWx4oIKOARn_9U,22178
@@ -34,7 +31,7 @@ mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
34
31
  mdbq/redis/getredis.py,sha256=1pTga2iINx0NV2ffl0D-aspZhrZMDQR8SpohAv1acoo,24076
35
32
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
36
33
  mdbq/spider/aikucun.py,sha256=o_QwFWbD6O2F56k6bwnpVV55EcdFCyes05ON7iu9TrA,21882
37
- mdbq-3.7.21.dist-info/METADATA,sha256=djMBfPKhIng7q9z0YfYiUwAtXxsblvuMfY4eThgreV4,244
38
- mdbq-3.7.21.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
39
- mdbq-3.7.21.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
40
- mdbq-3.7.21.dist-info/RECORD,,
34
+ mdbq-3.7.23.dist-info/METADATA,sha256=fdkmDNycOfqYZ-1Yex9emViiRWSFz_fxEg4EF8aLS_I,364
35
+ mdbq-3.7.23.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
36
+ mdbq-3.7.23.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
37
+ mdbq-3.7.23.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.0)
2
+ Generator: setuptools (75.8.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,58 +0,0 @@
1
- # -*- coding: UTF-8 –*-
2
- import os
3
- import sys
4
- import json
5
- import socket
6
- import logging
7
- from mdbq.mysql import mysql
8
-
9
- support_path = os.path.join(os.path.realpath(os.path.dirname(sys.argv[0])), 'support')
10
- logger = logging.getLogger(__name__)
11
-
12
-
13
- def return_default_host():
14
- targe_host = socket.gethostname()
15
- hostname = 'xigua_lx' # 正常情况下 spider_tg 只会在 xigua_lx 或者 xigua1 运行,且都指向主库
16
- local = 'remoto'
17
-
18
- if targe_host == 'xigua_lx':
19
- local = 'local' # 直接指向局域网地址
20
- elif targe_host in ['localhost.localdomain', 'xigua1']:
21
- targe_host = 'xigua1' # 修正 Linux 系统用户名
22
- local = 'local' # 直接指向局域网地址
23
- elif targe_host == 'MacBookPro':
24
- local = 'local' # 直接指向局域网地址
25
- return targe_host, hostname, local
26
-
27
-
28
- def get_mysql_engine(platform='Windows', hostname='xigua_lx', sql='mysql', local='remoto', config_file=None):
29
- if not config_file:
30
- config_file = os.path.join(support_path, 'my_config.txt')
31
- if not os.path.isfile(config_file):
32
- print(f'缺少配置文件,无法读取配置文件: {config_file}')
33
- return None
34
-
35
- if socket.gethostname() == 'xigua_lx':
36
- local = 'local'
37
-
38
- with open(config_file, 'r', encoding='utf-8') as f:
39
- conf = json.load(f)
40
- conf_data = conf[platform][hostname][sql][local]
41
- username, password, host, port = conf_data['username'], conf_data['password'], conf_data['host'], conf_data['port']
42
- _engine = mysql.MysqlUpload(username=username, password=password, host=host, port=port, charset='utf8mb4')
43
- return _engine, username, password, host, port
44
-
45
-
46
- def write_back_bak(datas):
47
- """ 将数据写回本地 """
48
- if not os.path.isdir(support_path):
49
- print(f'缺少配置文件,无法读取配置文件: {file}')
50
- return
51
- file = os.path.join(support_path, 'my_config.txt')
52
- with open(file, 'w+', encoding='utf-8') as f:
53
- json.dump(datas, f, ensure_ascii=False, sort_keys=False, indent=4)
54
-
55
-
56
-
57
- if __name__ == '__main__':
58
- pass
@@ -1,34 +0,0 @@
1
- # -*- coding: UTF-8 –*-
2
- import os
3
- import sys
4
- import json
5
- # from mdbq.config import set_support
6
- """
7
- 用来读取本地配置文件
8
- """
9
- support_path = os.path.join(os.path.realpath(os.path.dirname(sys.argv[0])), 'support')
10
-
11
-
12
- def main():
13
- # support_path = set_support.SetSupport(dirname='support').dirname
14
- file = os.path.join(support_path, 'my_config.txt')
15
- if not os.path.isfile(file):
16
- print(f'缺少配置文件,无法读取配置文件: {file}')
17
- return
18
- with open(file, 'r', encoding='utf-8') as f:
19
- config_datas = json.load(f)
20
- return config_datas
21
-
22
-
23
- def write_back(datas):
24
- """ 将数据写回本地 all-datas.py 调用 """
25
- # support_path = set_support.SetSupport(dirname='support').dirname
26
- file = os.path.join(support_path, 'my_config.txt')
27
- with open(file, 'w+', encoding='utf-8') as f:
28
- json.dump(datas, f, ensure_ascii=False, sort_keys=False, indent=4)
29
-
30
-
31
-
32
- if __name__ == '__main__':
33
- d = main()
34
- print(d)
@@ -1,159 +0,0 @@
1
- # -*- coding: UTF-8 –*-
2
- import json
3
- import os
4
- import platform
5
- import getpass
6
- import pandas as pd
7
- from mdbq.mysql import mysql
8
- from mdbq.config import default
9
- from numpy.ma.core import product
10
-
11
- """
12
- 天猫货品年份基准对照
13
- 用于聚合数据,通过此数据表进一步可确定商品上架年月
14
- """
15
- targe_host, hostname, local = default.return_default_host()
16
- m_engine, username, password, host, port = default.get_mysql_engine(platform='Windows', hostname=hostname, sql='mysql', local=local, config_file=None)
17
- if not username:
18
- print(f'找不到主机1:')
19
-
20
-
21
- class Products:
22
- def __init__(self):
23
- self.datas = []
24
-
25
- def update_my_datas(self):
26
- my_datas = [
27
- {
28
- '平台': '天猫', '商品id': '848929365000', '上市年份': '2024年11月'
29
- },
30
- {
31
- '平台': '天猫', '商品id': '840499705000', '上市年份': '2024年10月'
32
- },
33
- {
34
- '平台': '天猫', '商品id': '830789680000', '上市年份': '2024年9月'
35
- },
36
- {
37
- '平台': '天猫', '商品id': '822020840000', '上市年份': '2024年8月'
38
- },
39
- {
40
- '平台': '天猫', '商品id': '811000000000', '上市年份': '2024年7月'
41
- },
42
- {
43
- '平台': '天猫', '商品id': '800000000000', '上市年份': '2024年6月'
44
- },
45
- {
46
- '平台': '天猫', '商品id': '791359643000', '上市年份': '2024年5月'
47
- },
48
- {
49
- '平台': '天猫', '商品id': '778971448000', '上市年份': '2024年4月'
50
- },
51
- {
52
- '平台': '天猫', '商品id': '770576016800', '上市年份': '2024年3月'
53
- },
54
- {
55
- '平台': '天猫', '商品id': '766115058400', '上市年份': '2024年2月'
56
- },
57
- {
58
- '平台': '天猫', '商品id': '759478591100', '上市年份': '2024年1月'
59
- },
60
- {
61
- '平台': '天猫', '商品id': '752770183000', '上市年份': '2023年12月'
62
- },
63
- {
64
- '平台': '天猫', '商品id': '745123890000', '上市年份': '2023年11月'
65
- },
66
- {
67
- '平台': '天猫', '商品id': '741000000000', '上市年份': '2023年10月'
68
- },
69
- {
70
- '平台': '天猫', '商品id': '736841920000', '上市年份': '2023年9月'
71
- },
72
- {
73
- '平台': '天猫', '商品id': '730800000000', '上市年份': '2023年8月'
74
- },
75
- {
76
- '平台': '天猫', '商品id': '726939636000', '上市年份': '2023年7月'
77
- },
78
- {
79
- '平台': '天猫', '商品id': '721366048000', '上市年份': '2023年6月'
80
- },
81
- {
82
- '平台': '天猫', '商品id': '716130443000', '上市年份': '2023年5月'
83
- },
84
- {
85
- '平台': '天猫', '商品id': '709824308000', '上市年份': '2023年4月'
86
- },
87
- {
88
- '平台': '天猫', '商品id': '705440027000', '上市年份': '2023年3月'
89
- },
90
- {
91
- '平台': '天猫', '商品id': '701096067900', '上市年份': '2023年2月'
92
- },
93
- {
94
- '平台': '天猫', '商品id': '696017000000', '上市年份': '2023年1月'
95
- },
96
- {
97
- '平台': '天猫', '商品id': '666510000000', '上市年份': '2022年货品'
98
- },
99
- {
100
- '平台': '天猫', '商品id': '636010000000', '上市年份': '2021年货品'
101
- },
102
- {
103
- '平台': '天猫', '商品id': '610485872286', '上市年份': '2020年货品'
104
- },
105
- {
106
- '平台': '天猫', '商品id': '585066000000', '上市年份': '2019年货品'
107
- },
108
- {
109
- '平台': '天猫', '商品id': '563237000000', '上市年份': '2018年货品'
110
- },
111
- {
112
- '平台': '天猫', '商品id': '100', '上市年份': '历史悠久'
113
- },
114
- ]
115
- self.datas += my_datas
116
-
117
-
118
- def to_mysql(self):
119
- self.update_my_datas()
120
- df = pd.DataFrame(self.datas)
121
- m_engine = mysql.MysqlUpload(
122
- username=username,
123
- password=password,
124
- host=host,
125
- port=port,
126
- )
127
- m_engine.insert_many_dict(
128
- db_name='属性设置3',
129
- table_name='货品年份基准',
130
- dict_data_list=df.to_dict(orient='records'),
131
- # icm_update=['日期', '店铺名称', '宝贝id'], # 唯一组合键
132
- unique_main_key=['商品id'],
133
- set_typ={
134
- '商品id': 'bigint',
135
- '平台': 'varchar(100)',
136
- '上市年份': 'varchar(100)',
137
- },
138
- )
139
-
140
- def market_date(self, product_id: int):
141
- try:
142
- product_id = int(product_id)
143
- except:
144
- return
145
- self.update_my_datas()
146
- market_date = [item['上市年份'] for item in self.datas if product_id > int(item['商品id'])]
147
- if market_date:
148
- return market_date[0] # 返回上市年份
149
-
150
-
151
- def main():
152
- pass
153
-
154
-
155
- if __name__ == '__main__':
156
- product_id = '696017020186'
157
- p = Products()
158
- year = p.market_date(product_id=product_id)
159
- print(f'{product_id}: {year}')