cppackage 0.2.2__tar.gz → 0.2.4__tar.gz

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.
@@ -5,7 +5,7 @@ _db_config = {
5
5
  'user': os.getenv('CPPACKAGE_DB_USER'),
6
6
  'password': os.getenv('CPPACKAGE_DB_PASSWORD'),
7
7
  'database': os.getenv('CPPACKAGE_DB_NAME'),
8
- 'port': int(os.getenv('CPPACKAGE_DB_PORT')),
8
+ 'port': int(os.getenv('CPPACKAGE_DB_PORT'), 3306),
9
9
  }
10
10
 
11
11
  def set_db_config(host=None, user=None, password=None, database=None, port=None):
@@ -101,12 +101,10 @@ def add_columns(table_name, database, columns):
101
101
  conn.commit()
102
102
 
103
103
  # 表结构校验
104
- def check_and_sync_columns(df, table_name, database, max_new=5):
104
+ def check_and_sync_columns(df ,table_name, database, max_new=5):
105
105
 
106
106
  df_cols = set(df.columns)
107
-
108
- db_cols = set(get_table_columns(table_name, database))
109
-
107
+ db_cols= get_table_columns(table_name, database)
110
108
  new_cols = df_cols - db_cols
111
109
  missing_cols = db_cols - df_cols
112
110
  print("新增字段:", new_cols if new_cols else "无")
@@ -121,13 +119,6 @@ def check_and_sync_columns(df, table_name, database, max_new=5):
121
119
 
122
120
  print("开始同步字段...")
123
121
  add_columns(table_name, database, new_cols)
124
-
125
- # 二次校验
126
- new_db_cols = set(get_table_columns(table_name, database))
127
-
128
- if not df_cols.issubset(new_db_cols):
129
- raise Exception("字段同步失败")
130
-
131
122
  print("字段同步成功")
132
123
 
133
124
  return True
@@ -138,34 +129,37 @@ def check_and_sync_columns(df, table_name, database, max_new=5):
138
129
  def update_datas(df, table_name, database):
139
130
 
140
131
  conn = None
141
-
142
- try:
143
- # 表结构校验
144
- conn = _get_connection(database)
145
- cursor = conn.cursor()
146
- cols = list(df.columns)
147
- col_str = ",".join([f"`{c}`" for c in cols])
148
- value_tpl = "(" + ",".join(["%s"] * len(cols)) + ")"
149
- values_str = ",".join([value_tpl] * len(df))
150
- update_clause = ",".join(
151
- [f"`{c}`=VALUES(`{c}`)" for c in cols if c != "id"]
152
- )
153
- sql = f"""
154
- INSERT INTO `{table_name}` ({col_str})
155
- VALUES {values_str}
156
- ON DUPLICATE KEY UPDATE {update_clause}
157
- """
158
- data = [tuple(row) for row in df.values]
159
- flat_data = [v for row in data for v in row]
160
- cursor.execute(sql, flat_data)
161
- conn.commit()
162
- print(f"成功插入/更新 {cursor.rowcount} 条记录")
163
- except Exception as e:
164
- if conn:
165
- conn.rollback()
166
- print("入库失败:", e)
167
- finally:
168
- if conn:
169
- conn.close()
132
+ for i in range(2):
133
+ try:
134
+ # 表结构校验,df为抓取数据表,db_cols为数据库现有字段
135
+ conn = _get_connection(database)
136
+ cursor = conn.cursor()
137
+ cols = list(df.columns)
138
+ col_str = ",".join([f"`{c}`" for c in cols])
139
+ value_tpl = "(" + ",".join(["%s"] * len(cols)) + ")"
140
+ values_str = ",".join([value_tpl] * len(df))
141
+ update_clause = ",".join(
142
+ [f"`{c}`=VALUES(`{c}`)" for c in cols if c != "id"]
143
+ )
144
+ sql = f"""
145
+ INSERT INTO `{table_name}` ({col_str})
146
+ VALUES {values_str}
147
+ ON DUPLICATE KEY UPDATE {update_clause}
148
+ """
149
+ data = [tuple(row) for row in df.values]
150
+ flat_data = [v for row in data for v in row]
151
+ cursor.execute(sql, flat_data)
152
+ conn.commit()
153
+ print(f"成功插入/更新 {cursor.rowcount} 条记录")
154
+ break
155
+ except Exception as e:
156
+ if conn:
157
+ conn.rollback()
158
+ print("入库失败:", e)
159
+ if '1054, "Unknown column' in str(e):
160
+ check_and_sync_columns(df,table_name,database)
161
+ finally:
162
+ if conn:
163
+ conn.close()
170
164
 
171
165
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cppackage
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: 超品集团自用的Python包
5
5
  Home-page: https://github.com/example/CPpackage
6
6
  Author: team-数智组
@@ -50,6 +50,8 @@ pip install cppackage
50
50
  from CPpackage.db.config import set_db_config
51
51
  from CPpackage.db.sql_model import sel_data, del_data , incremental_update, get_table_columns,add_columns,check_and_sync_columns,update_datas
52
52
 
53
+ #
54
+
53
55
  # 配置数据库连接(也可通过环境变量CPPACKAGE_DB_*配置)
54
56
  set_db_config(host='your_host', user='your_user', password='your_password', database='your_database', port=3306)
55
57
 
@@ -14,7 +14,6 @@ CPpackage/core/__init__.py
14
14
  CPpackage/db/__init__.py
15
15
  CPpackage/db/config.py
16
16
  CPpackage/db/sql_model.py
17
- CPpackage/db/sql_modelcopy.py
18
17
  CPpackage/utils/__init__.py
19
18
  cppackage.egg-info/PKG-INFO
20
19
  cppackage.egg-info/SOURCES.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cppackage
3
- Version: 0.2.2
3
+ Version: 0.2.4
4
4
  Summary: 超品集团自用的Python包
5
5
  Home-page: https://github.com/example/CPpackage
6
6
  Author: team-数智组
@@ -50,6 +50,8 @@ pip install cppackage
50
50
  from CPpackage.db.config import set_db_config
51
51
  from CPpackage.db.sql_model import sel_data, del_data , incremental_update, get_table_columns,add_columns,check_and_sync_columns,update_datas
52
52
 
53
+ #
54
+
53
55
  # 配置数据库连接(也可通过环境变量CPPACKAGE_DB_*配置)
54
56
  set_db_config(host='your_host', user='your_user', password='your_password', database='your_database', port=3306)
55
57
 
@@ -17,6 +17,8 @@ pip install cppackage
17
17
  from CPpackage.db.config import set_db_config
18
18
  from CPpackage.db.sql_model import sel_data, del_data , incremental_update, get_table_columns,add_columns,check_and_sync_columns,update_datas
19
19
 
20
+ #
21
+
20
22
  # 配置数据库连接(也可通过环境变量CPPACKAGE_DB_*配置)
21
23
  set_db_config(host='your_host', user='your_user', password='your_password', database='your_database', port=3306)
22
24
 
@@ -10,7 +10,7 @@ with open('readme.md', 'r', encoding='utf-8') as f:
10
10
  # 包的基本信息
11
11
  setup(
12
12
  name='cppackage',
13
- version='0.2.2',
13
+ version='0.2.4',
14
14
  description='超品集团自用的Python包',
15
15
  long_description=long_description,
16
16
  long_description_content_type='text/markdown',
@@ -1,105 +0,0 @@
1
- import pymysql
2
- import time
3
- from pymysql import Error
4
- from .config import get_db_config
5
-
6
- def _get_connection(database=None, port=None):
7
- cfg = get_db_config()
8
- db = database if database is not None else cfg.get('database')
9
- prt = port if port is not None else cfg.get('port', 3306)
10
- return pymysql.connect(
11
- host=cfg.get('host'),
12
- user=cfg.get('user'),
13
- password=cfg.get('password'),
14
- database=db,
15
- port=prt,
16
- )
17
-
18
- def sel_data(sql, port=None, database=None):
19
- try:
20
- conn = _get_connection(database=database, port=port)
21
- cursor = conn.cursor()
22
- cursor.execute(sql)
23
- result = cursor.fetchall()
24
- cursor.close()
25
- conn.close()
26
- return result
27
- except pymysql.MySQLError as e:
28
- print(f"An error occurred: {e}")
29
-
30
- def update_data(sql, values, port=None, database=None):
31
- conn = _get_connection(database=database, port=port)
32
- cursor = conn.cursor()
33
- cursor.execute(sql, values)
34
- conn.commit()
35
- cursor.close()
36
- conn.close()
37
-
38
- def updata(data, databases, table):
39
- s = ""
40
- st1 = ""
41
- for i in data.columns.values:
42
- s = s + "`" + i + "`,"
43
- st1 = st1 + "%s,"
44
- s = s[:-1]
45
- st1 = st1[:-1]
46
- all_data = []
47
- for _, k in data.iterrows():
48
- all_data.append(tuple(k.to_list()))
49
- sql = 'INSERT INTO %s (%s) VALUES (%s)' % (table, s, st1)
50
- update_datas(sql, tuple(all_data), database=databases)
51
- time.sleep(2)
52
-
53
- def deldata(all_del_list, id_name, table_name, database):
54
- str11 = ""
55
- for te in all_del_list:
56
- if "str" in str(type(te)):
57
- str11 = str11 + "'" + str(te) + "',"
58
- else:
59
- str11 = str11 + str(te) + ","
60
- str11 = str11[:-1]
61
- delsql = 'DELETE from `%s` where %s in (%s)' % (table_name, id_name, str11)
62
- del_data(delsql, database=database)
63
-
64
- def deldata_time(id_name, table_name, id, database, time_name, start_time, end_time):
65
- delsql = 'DELETE from `%s` where %s = %s and `%s`>= "%s" and `%s`<= "%s"' % (
66
- table_name, id_name, id, time_name, start_time, time_name, end_time
67
- )
68
- del_data(delsql, database=database)
69
-
70
- def update_datas(sql, values, port=None, database=None):
71
- with _get_connection(database=database, port=port) as conn:
72
- with conn.cursor() as cursor:
73
- cursor.executemany(sql, values)
74
- conn.commit()
75
-
76
- def del_data(sql, port=None, database=None):
77
- try:
78
- conn = _get_connection(database=database, port=port)
79
- cursor = conn.cursor()
80
- cursor.execute(sql)
81
- conn.commit()
82
- cursor.close()
83
- conn.close()
84
- except pymysql.MySQLError as e:
85
- print(f"An error occurred: {e}")
86
-
87
- def update_test(df, table_name, databases):
88
- try:
89
- conn = _get_connection(database=databases)
90
- cursor = conn.cursor()
91
- columns = ', '.join(df.columns)
92
- values_template = ', '.join([f'({", ".join(["%s"] * len(df.columns))})'] * len(df))
93
- update_clause = ', '.join([f'{col} = VALUES({col})' for col in df.columns if col != 'id'])
94
- sql = f"INSERT INTO {table_name} ({columns}) VALUES {values_template} " \
95
- f"ON DUPLICATE KEY UPDATE {update_clause}"
96
- values = [tuple(row) for row in df.values]
97
- flat_values = [item for sublist in values for item in sublist]
98
- cursor.execute(sql, flat_values)
99
- conn.commit()
100
- print(f"成功插入/更新 {cursor.rowcount} 条记录")
101
- except Error as e:
102
- print(f"数据库错误: {e}")
103
- finally:
104
- if conn:
105
- conn.close()
File without changes
File without changes
File without changes