mdbq 1.0.9__py3-none-any.whl → 1.1.1__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.
- mdbq/aggregation/mysql_types.py +1 -1
- mdbq/aggregation/query_data.py +1 -0
- mdbq/mysql/mysql.py +33 -20
- {mdbq-1.0.9.dist-info → mdbq-1.1.1.dist-info}/METADATA +1 -1
- {mdbq-1.0.9.dist-info → mdbq-1.1.1.dist-info}/RECORD +7 -7
- {mdbq-1.0.9.dist-info → mdbq-1.1.1.dist-info}/WHEEL +0 -0
- {mdbq-1.0.9.dist-info → mdbq-1.1.1.dist-info}/top_level.txt +0 -0
mdbq/aggregation/mysql_types.py
CHANGED
@@ -155,7 +155,7 @@ def mysql_all_dtypes(db_name=None, table_name=None, path=None):
|
|
155
155
|
if not path:
|
156
156
|
path = set_support.SetSupport(dirname='support').dirname
|
157
157
|
|
158
|
-
username, password, host, port = get_myconf.select_config_values(target_service='
|
158
|
+
username, password, host, port = get_myconf.select_config_values(target_service='home_lx', database='mysql')
|
159
159
|
config = {
|
160
160
|
'host': host,
|
161
161
|
'port': port,
|
mdbq/aggregation/query_data.py
CHANGED
mdbq/mysql/mysql.py
CHANGED
@@ -131,21 +131,24 @@ class MysqlUpload:
|
|
131
131
|
print(f'{now}正在更新 mysql ({self.host}:{self.port}) {db_name}/{table_name}')
|
132
132
|
datas = df.to_dict(orient='records')
|
133
133
|
for data in datas:
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
result = cursor.fetchall() # 获取查询结果, 如果有结果返回 list,没有则返回空元组 tuple
|
146
|
-
if not result: # 数据不存在则插入
|
147
|
-
sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
|
134
|
+
try:
|
135
|
+
cols = ', '.join(f"`{item}`" for item in data.keys()) # 列名转义
|
136
|
+
# data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
|
137
|
+
values = ', '.join([f"'{item}'" for item in data.values()]) # 值要加单引号 ''
|
138
|
+
condition = []
|
139
|
+
for k, v in data.items():
|
140
|
+
condition += [f"`{k}` = '{v}'"]
|
141
|
+
condition = ' AND '.join(condition) # 构建查询条件
|
142
|
+
# print(condition)
|
143
|
+
|
144
|
+
sql = f"SELECT {cols} FROM `{table_name}` WHERE {condition}"
|
148
145
|
cursor.execute(sql)
|
146
|
+
result = cursor.fetchall() # 获取查询结果, 如果有结果返回 list,没有则返回空元组 tuple
|
147
|
+
if not result: # 数据不存在则插入
|
148
|
+
sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
|
149
|
+
cursor.execute(sql)
|
150
|
+
except Exception as e:
|
151
|
+
print(f'mysql -> df_to_mysql 报错: {e}')
|
149
152
|
connection.commit() # 提交事务
|
150
153
|
|
151
154
|
def convert_dtypes(self, df, db_name, table_name):
|
@@ -180,6 +183,18 @@ class MysqlUpload:
|
|
180
183
|
|
181
184
|
def convert_dtype_to_sql(self, df, col, dtype):
|
182
185
|
""" 按照以下规则转换DataFrame列的数据类型为 MYSQL 专有的数据类型 """
|
186
|
+
|
187
|
+
def find_longest_decimal_value(number_list):
|
188
|
+
# 取列表中小数位数最长的值
|
189
|
+
longest_value = None
|
190
|
+
max_decimals = 0
|
191
|
+
for num in number_list:
|
192
|
+
decimal_places = len(str(num).split('.')[1])
|
193
|
+
if decimal_places > max_decimals:
|
194
|
+
max_decimals = decimal_places
|
195
|
+
longest_value = num
|
196
|
+
return longest_value
|
197
|
+
|
183
198
|
# 最优先处理 ID 类型, 在 mysql 里面, 有些列数字过长不能存储为 int 类型
|
184
199
|
if 'id' in col or 'ID' in col or 'Id' in col or '摘要' in col or '商家编码' in col or '单号' in col or '款号' in col:
|
185
200
|
return 'mediumtext'
|
@@ -204,9 +219,9 @@ class MysqlUpload:
|
|
204
219
|
return 'mediumtext'
|
205
220
|
return 'INT'
|
206
221
|
elif dtype == 'float64':
|
207
|
-
|
208
|
-
int_step = len(str(
|
209
|
-
f_step = len(str(
|
222
|
+
res = find_longest_decimal_value(df[col].tolist()) # 取小数位数最长的值
|
223
|
+
int_step = len(str(res).split('.')[0]) # 整数位数长度
|
224
|
+
f_step = len(str(res).split('.')[1]) # 小数位数长度
|
210
225
|
if int_step >= 12:
|
211
226
|
return 'mediumtext' # mysql 中不要使用 float 和 double 类型,会影响计算结果
|
212
227
|
elif int_step >= 8 and f_step >= 0:
|
@@ -686,7 +701,7 @@ if __name__ == '__main__':
|
|
686
701
|
username, password, host, port = get_myconf.select_config_values(target_service='company', database='mysql')
|
687
702
|
print(username, password, host, port)
|
688
703
|
|
689
|
-
file = '/Users/xigua/
|
704
|
+
file = '/Users/xigua/数据中心/原始文件2/京东报表/JD商品明细spu/2024-08/spu_2024-08-18_全部渠道_商品明细.csv'
|
690
705
|
one_file_to_mysql(
|
691
706
|
file=file,
|
692
707
|
db_name='test',
|
@@ -695,5 +710,3 @@ if __name__ == '__main__':
|
|
695
710
|
database='mysql'
|
696
711
|
)
|
697
712
|
|
698
|
-
|
699
|
-
|
@@ -3,9 +3,9 @@ mdbq/__version__.py,sha256=y9Mp_8x0BCZSHsdLT_q5tX9wZwd5QgqrSIENLrb6vXA,62
|
|
3
3
|
mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
|
4
4
|
mdbq/aggregation/aggregation.py,sha256=L1IyrfdSfCThg7sa2mFQ4hZWnHRhkIBF91FCQIEGAn0,53076
|
5
5
|
mdbq/aggregation/df_types.py,sha256=T35KML0sdch8GzIwo7CxSIrt72YVElBeCrsKQx4dX_0,7531
|
6
|
-
mdbq/aggregation/mysql_types.py,sha256=
|
6
|
+
mdbq/aggregation/mysql_types.py,sha256=anDOq1fjiYUzM_E1D5Db865aat_3Cc-aLW9vCK-9W8I,10313
|
7
7
|
mdbq/aggregation/optimize_data.py,sha256=jLAWtxPUuhpo4XTVrhKtT4xK3grs7r73ePQfLhxlu1I,779
|
8
|
-
mdbq/aggregation/query_data.py,sha256=
|
8
|
+
mdbq/aggregation/query_data.py,sha256=cIAfbtn5uXcR1OzIG02f5nRw-WgqlFZ1bakwPAHoYYE,25307
|
9
9
|
mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
|
10
10
|
mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
|
11
11
|
mdbq/clean/__init__.py,sha256=A1d6x3L27j4NtLgiFV5TANwEkLuaDfPHDQNrPBbNWtU,41
|
@@ -25,7 +25,7 @@ mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
|
|
25
25
|
mdbq/mongo/mongo.py,sha256=q0B4wXDSTtXg_vMN7MPh6zdxl6tT68tM74LmdVNQQek,31892
|
26
26
|
mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
|
27
27
|
mdbq/mysql/data_types_即将删除.py,sha256=sjBBDKr9674LdjM5N_dwyJACdZPbdB8Beli59jGdgnQ,10378
|
28
|
-
mdbq/mysql/mysql.py,sha256=
|
28
|
+
mdbq/mysql/mysql.py,sha256=SW2BgDS59DRTMTvoy8JAHDUv_lFBq7pBIRl0SKMv_kg,34819
|
29
29
|
mdbq/mysql/s_query.py,sha256=4c24SwbqtnO33o8CgWlTQ_j8sZYl5BRIQkaD9CI-vTY,7901
|
30
30
|
mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
|
31
31
|
mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
|
@@ -36,7 +36,7 @@ mdbq/pbix/__init__.py,sha256=Trtfaynu9RjoTyLLYBN2xdRxTvm_zhCniUkVTAYwcjo,24
|
|
36
36
|
mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,2396
|
37
37
|
mdbq/pbix/refresh_all.py,sha256=tgy762608HMaXWynbOURIf2UVMuSPybzrDXQnOOcnZU,6102
|
38
38
|
mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
|
39
|
-
mdbq-1.
|
40
|
-
mdbq-1.
|
41
|
-
mdbq-1.
|
42
|
-
mdbq-1.
|
39
|
+
mdbq-1.1.1.dist-info/METADATA,sha256=W7R5QW0zn36fLL4Tj94n6oqQf1uZHqHtOCBi-BRJfeA,245
|
40
|
+
mdbq-1.1.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
|
41
|
+
mdbq-1.1.1.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
|
42
|
+
mdbq-1.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|