cppackage 0.2.2__tar.gz → 0.2.3__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.
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage/db/sql_model.py +35 -41
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage.egg-info/PKG-INFO +3 -1
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage.egg-info/SOURCES.txt +0 -1
- {cppackage-0.2.2 → cppackage-0.2.3}/PKG-INFO +3 -1
- {cppackage-0.2.2 → cppackage-0.2.3}/readme.md +2 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/setup.py +1 -1
- cppackage-0.2.2/CPpackage/db/sql_modelcopy.py +0 -105
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage/__init__.py +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage/core/__init__.py +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage/db/__init__.py +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage/db/config.py +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage/utils/__init__.py +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage.egg-info/dependency_links.txt +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage.egg-info/entry_points.txt +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage.egg-info/not-zip-safe +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage.egg-info/requires.txt +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/CPpackage.egg-info/top_level.txt +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/LICENSE +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/MANIFEST.in +0 -0
- {cppackage-0.2.2 → cppackage-0.2.3}/setup.cfg +0 -0
|
@@ -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,
|
|
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
|
|
@@ -135,37 +126,40 @@ def check_and_sync_columns(df, table_name, database, max_new=5):
|
|
|
135
126
|
|
|
136
127
|
# ===================== DataFrame 入库 =====================
|
|
137
128
|
|
|
138
|
-
def update_datas(df, table_name, database):
|
|
129
|
+
def update_datas(df,db_cols, table_name, database):
|
|
139
130
|
|
|
140
131
|
conn = None
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
conn
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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,db_cols,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.
|
|
3
|
+
Version: 0.2.3
|
|
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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cppackage
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
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
|
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|