re-common 10.0.37__py3-none-any.whl → 10.0.39__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.
- re_common/baselibrary/__init__.py +4 -4
- re_common/baselibrary/baseabs/__init__.py +6 -6
- re_common/baselibrary/baseabs/baseabs.py +26 -26
- re_common/baselibrary/database/mbuilder.py +132 -132
- re_common/baselibrary/database/moudle.py +93 -93
- re_common/baselibrary/database/msqlite3.py +194 -194
- re_common/baselibrary/database/mysql.py +169 -169
- re_common/baselibrary/database/sql_factory.py +26 -26
- re_common/baselibrary/mthread/MThreadingRun.py +486 -486
- re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
- re_common/baselibrary/mthread/__init__.py +2 -2
- re_common/baselibrary/mthread/mythreading.py +695 -695
- re_common/baselibrary/pakge_other/socks.py +404 -404
- re_common/baselibrary/readconfig/config_factory.py +18 -18
- re_common/baselibrary/readconfig/ini_config.py +317 -317
- re_common/baselibrary/readconfig/toml_config.py +49 -49
- re_common/baselibrary/temporary/envdata.py +36 -36
- re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
- re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
- re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
- re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
- re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
- re_common/baselibrary/tools/contrast_db3.py +123 -123
- re_common/baselibrary/tools/copy_file.py +39 -39
- re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
- re_common/baselibrary/tools/foreachgz.py +39 -39
- re_common/baselibrary/tools/get_attr.py +10 -10
- re_common/baselibrary/tools/image_to_pdf.py +61 -61
- re_common/baselibrary/tools/java_code_deal.py +139 -139
- re_common/baselibrary/tools/javacode.py +79 -79
- re_common/baselibrary/tools/mdb_db3.py +48 -48
- re_common/baselibrary/tools/merge_file.py +171 -171
- re_common/baselibrary/tools/merge_gz_file.py +165 -165
- re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
- re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
- re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
- re_common/baselibrary/tools/mongo_tools.py +50 -50
- re_common/baselibrary/tools/move_file.py +170 -170
- re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
- re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
- re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
- re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
- re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
- re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
- re_common/baselibrary/tools/myparsel.py +104 -104
- re_common/baselibrary/tools/rename_dir_file.py +37 -37
- re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
- re_common/baselibrary/tools/split_line_to_many.py +25 -25
- re_common/baselibrary/tools/stringtodicts.py +33 -33
- re_common/baselibrary/tools/workwechant_bot.py +84 -84
- re_common/baselibrary/utils/baseaiohttp.py +296 -296
- re_common/baselibrary/utils/baseaiomysql.py +87 -87
- re_common/baselibrary/utils/baseallstep.py +191 -191
- re_common/baselibrary/utils/baseavro.py +19 -19
- re_common/baselibrary/utils/baseboto3.py +291 -291
- re_common/baselibrary/utils/basecsv.py +32 -32
- re_common/baselibrary/utils/basedict.py +133 -133
- re_common/baselibrary/utils/basedir.py +241 -241
- re_common/baselibrary/utils/baseencode.py +351 -351
- re_common/baselibrary/utils/baseencoding.py +28 -28
- re_common/baselibrary/utils/baseesdsl.py +86 -86
- re_common/baselibrary/utils/baseexcel.py +264 -264
- re_common/baselibrary/utils/baseexcept.py +109 -109
- re_common/baselibrary/utils/basefile.py +654 -654
- re_common/baselibrary/utils/baseftp.py +214 -214
- re_common/baselibrary/utils/basegzip.py +60 -60
- re_common/baselibrary/utils/basehdfs.py +135 -135
- re_common/baselibrary/utils/basehttpx.py +268 -268
- re_common/baselibrary/utils/baseip.py +87 -87
- re_common/baselibrary/utils/basejson.py +2 -2
- re_common/baselibrary/utils/baselist.py +32 -32
- re_common/baselibrary/utils/basemotor.py +190 -190
- re_common/baselibrary/utils/basemssql.py +98 -98
- re_common/baselibrary/utils/baseodbc.py +113 -113
- re_common/baselibrary/utils/basepandas.py +302 -302
- re_common/baselibrary/utils/basepeewee.py +11 -11
- re_common/baselibrary/utils/basepika.py +180 -180
- re_common/baselibrary/utils/basepydash.py +143 -143
- re_common/baselibrary/utils/basepymongo.py +230 -230
- re_common/baselibrary/utils/basequeue.py +22 -22
- re_common/baselibrary/utils/baserar.py +57 -57
- re_common/baselibrary/utils/baserequest.py +279 -279
- re_common/baselibrary/utils/baseset.py +8 -8
- re_common/baselibrary/utils/basesmb.py +403 -403
- re_common/baselibrary/utils/basestring.py +382 -382
- re_common/baselibrary/utils/basetime.py +320 -320
- re_common/baselibrary/utils/baseurl.py +121 -121
- re_common/baselibrary/utils/basezip.py +57 -57
- re_common/baselibrary/utils/core/__init__.py +7 -7
- re_common/baselibrary/utils/core/bottomutils.py +18 -18
- re_common/baselibrary/utils/core/mdeprecated.py +327 -327
- re_common/baselibrary/utils/core/mlamada.py +16 -16
- re_common/baselibrary/utils/core/msginfo.py +25 -25
- re_common/baselibrary/utils/core/requests_core.py +103 -103
- re_common/baselibrary/utils/fateadm.py +429 -429
- re_common/baselibrary/utils/importfun.py +123 -123
- re_common/baselibrary/utils/mfaker.py +57 -57
- re_common/baselibrary/utils/my_abc/__init__.py +3 -3
- re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
- re_common/baselibrary/utils/mylogger.py +414 -414
- re_common/baselibrary/utils/myredisclient.py +861 -861
- re_common/baselibrary/utils/pipupgrade.py +21 -21
- re_common/baselibrary/utils/ringlist.py +85 -85
- re_common/baselibrary/utils/version_compare.py +36 -36
- re_common/baselibrary/utils/ydmhttp.py +126 -126
- re_common/facade/lazy_import.py +11 -11
- re_common/facade/loggerfacade.py +25 -25
- re_common/facade/mysqlfacade.py +467 -467
- re_common/facade/now.py +31 -31
- re_common/facade/sqlite3facade.py +257 -257
- re_common/facade/use/mq_use_facade.py +83 -83
- re_common/facade/use/proxy_use_facade.py +19 -19
- re_common/libtest/base_dict_test.py +19 -19
- re_common/libtest/baseavro_test.py +13 -13
- re_common/libtest/basefile_test.py +14 -14
- re_common/libtest/basemssql_test.py +77 -77
- re_common/libtest/baseodbc_test.py +7 -7
- re_common/libtest/basepandas_test.py +38 -38
- re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
- re_common/libtest/get_attr_test/settings.py +54 -54
- re_common/libtest/idencode_test.py +53 -53
- re_common/libtest/iniconfig_test.py +35 -35
- re_common/libtest/ip_test.py +34 -34
- re_common/libtest/merge_file_test.py +20 -20
- re_common/libtest/mfaker_test.py +8 -8
- re_common/libtest/mm3_test.py +31 -31
- re_common/libtest/mylogger_test.py +88 -88
- re_common/libtest/myparsel_test.py +27 -27
- re_common/libtest/mysql_test.py +151 -151
- re_common/libtest/pymongo_test.py +21 -21
- re_common/libtest/split_test.py +11 -11
- re_common/libtest/sqlite3_merge_test.py +5 -5
- re_common/libtest/sqlite3_test.py +34 -34
- re_common/libtest/tomlconfig_test.py +30 -30
- re_common/libtest/use_tools_test/__init__.py +2 -2
- re_common/libtest/user/__init__.py +4 -4
- re_common/studio/__init__.py +4 -4
- re_common/studio/assignment_expressions.py +36 -36
- re_common/studio/mydash/test1.py +18 -18
- re_common/studio/pydashstudio/first.py +9 -9
- re_common/studio/streamlitstudio/first_app.py +65 -65
- re_common/studio/streamlitstudio/uber_pickups.py +23 -23
- re_common/studio/test.py +18 -18
- re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +219 -219
- re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
- re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
- re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
- re_common/v2/baselibrary/decorators/utils.py +59 -59
- re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
- re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
- re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
- re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
- re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
- re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
- re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
- re_common/v2/baselibrary/tools/concurrency.py +35 -35
- re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
- re_common/v2/baselibrary/tools/data_processer/data_processer.py +508 -508
- re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
- re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
- re_common/v2/baselibrary/tools/dict_tools.py +44 -44
- re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
- re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
- re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
- re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
- re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
- re_common/v2/baselibrary/tools/list_tools.py +69 -69
- re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
- re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
- re_common/v2/baselibrary/tools/text_matcher.py +326 -326
- re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
- re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
- re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
- re_common/v2/baselibrary/utils/author_smi.py +361 -361
- re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
- re_common/v2/baselibrary/utils/basedict.py +37 -37
- re_common/v2/baselibrary/utils/basehdfs.py +163 -163
- re_common/v2/baselibrary/utils/basepika.py +180 -180
- re_common/v2/baselibrary/utils/basetime.py +77 -77
- re_common/v2/baselibrary/utils/db.py +156 -156
- re_common/v2/baselibrary/utils/json_cls.py +16 -16
- re_common/v2/baselibrary/utils/mq.py +83 -83
- re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
- re_common/v2/baselibrary/utils/string_bool.py +186 -186
- re_common/v2/baselibrary/utils/string_clear.py +246 -246
- re_common/v2/baselibrary/utils/string_smi.py +18 -18
- re_common/v2/baselibrary/utils/stringutils.py +271 -278
- re_common/vip/base_step_process.py +11 -11
- re_common/vip/baseencodeid.py +90 -90
- re_common/vip/changetaskname.py +28 -28
- re_common/vip/core_var.py +24 -24
- re_common/vip/mmh3Hash.py +89 -89
- re_common/vip/proxy/allproxys.py +127 -127
- re_common/vip/proxy/allproxys_thread.py +159 -159
- re_common/vip/proxy/cnki_proxy.py +153 -153
- re_common/vip/proxy/kuaidaili.py +87 -87
- re_common/vip/proxy/proxy_all.py +113 -113
- re_common/vip/proxy/update_kuaidaili_0.py +42 -42
- re_common/vip/proxy/wanfang_proxy.py +152 -152
- re_common/vip/proxy/wp_proxy_all.py +181 -181
- re_common/vip/read_rawid_to_txt.py +91 -91
- re_common/vip/title/__init__.py +5 -5
- re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
- re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
- re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
- re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
- re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
- re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
- re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
- re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
- re_common/vip/title/transform/__init__.py +10 -10
- {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/LICENSE +201 -201
- {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/METADATA +16 -16
- re_common-10.0.39.dist-info/RECORD +248 -0
- {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/WHEEL +1 -1
- re_common-10.0.37.dist-info/RECORD +0 -248
- {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/top_level.txt +0 -0
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
import sqlite3
|
|
2
|
-
|
|
3
|
-
from re_common.baselibrary.database.moudle import Sqlite3Moudle
|
|
4
|
-
from re_common.baselibrary.database.sql_factory import SqlFactory
|
|
5
|
-
from re_common.baselibrary.utils.basedict import BaseDicts
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def dict_factory(cursor, row):
|
|
9
|
-
"""
|
|
10
|
-
设置返回字典
|
|
11
|
-
:param row:
|
|
12
|
-
:return:
|
|
13
|
-
"""
|
|
14
|
-
d = {}
|
|
15
|
-
for index, col in enumerate(cursor.description):
|
|
16
|
-
d[col[0]] = row[index]
|
|
17
|
-
return d
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class Sqlite3(SqlFactory):
|
|
21
|
-
def __init__(self):
|
|
22
|
-
# 就是conn
|
|
23
|
-
self.db = ''
|
|
24
|
-
self.cursor = ''
|
|
25
|
-
self.sqlite3_moudle = {}
|
|
26
|
-
|
|
27
|
-
def set_result_dict(self):
|
|
28
|
-
def dict_factory(cursor, row):
|
|
29
|
-
d = {}
|
|
30
|
-
for idx, col in enumerate(cursor.description):
|
|
31
|
-
d[col[0]] = row[idx]
|
|
32
|
-
return d
|
|
33
|
-
|
|
34
|
-
self.db.row_factory = dict_factory
|
|
35
|
-
self.get_cursor()
|
|
36
|
-
return self
|
|
37
|
-
|
|
38
|
-
def set_encoding(self, bytes=False, encoding="gbk"):
|
|
39
|
-
"""
|
|
40
|
-
https://blog.csdn.net/xkxjy/article/details/8179479
|
|
41
|
-
在不知道编码格式的情况下 使用bytes 但我没有成功
|
|
42
|
-
:param bytes:
|
|
43
|
-
:param encoding:
|
|
44
|
-
:return:
|
|
45
|
-
"""
|
|
46
|
-
# if bytes:
|
|
47
|
-
# self.db.text_factory = bytes
|
|
48
|
-
# else:
|
|
49
|
-
# self.db.text_factory = lambda x: str(x, encoding, 'ignore')
|
|
50
|
-
self.db.text_factory = lambda x: str(x, encoding, 'ignore')
|
|
51
|
-
|
|
52
|
-
def link(self, sqlite3_moudle: Sqlite3Moudle):
|
|
53
|
-
"""
|
|
54
|
-
连接数据库
|
|
55
|
-
:param sqlite3_moudle:
|
|
56
|
-
:param mysqlmoudle:
|
|
57
|
-
:return:
|
|
58
|
-
"""
|
|
59
|
-
self.sqlite3_moudle = sqlite3_moudle
|
|
60
|
-
# 返回连接对象
|
|
61
|
-
dicts = sqlite3_moudle.to_dict()
|
|
62
|
-
dicts = BaseDicts.removeDictsNone(dicts)
|
|
63
|
-
self.db = sqlite3.connect(**dicts)
|
|
64
|
-
self.cursor = self.db.cursor()
|
|
65
|
-
return self.db, self.cursor
|
|
66
|
-
|
|
67
|
-
def get_cursor(self) -> sqlite3.Cursor:
|
|
68
|
-
"""
|
|
69
|
-
本函数通过链接返回sqlite3的游标
|
|
70
|
-
:param connect: 传入的是sqlite3的连接
|
|
71
|
-
:return: 返回游标
|
|
72
|
-
"""
|
|
73
|
-
assert isinstance(self.db, sqlite3.Connection)
|
|
74
|
-
self.cursor = self.db.cursor()
|
|
75
|
-
return self.cursor
|
|
76
|
-
|
|
77
|
-
def execute(self, sql: str) -> sqlite3.Cursor:
|
|
78
|
-
"""
|
|
79
|
-
通过游标对象执行sql语句并返回结果
|
|
80
|
-
:param cursor: 游标对象
|
|
81
|
-
:param sql: 需要执行的sql语句
|
|
82
|
-
:return: 返回结果的游标对象
|
|
83
|
-
"""
|
|
84
|
-
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
85
|
-
result = self.cursor.execute(sql)
|
|
86
|
-
return result
|
|
87
|
-
|
|
88
|
-
def executemany(self, sql: str, seq_of_parameters) -> sqlite3.Cursor:
|
|
89
|
-
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
90
|
-
result = self.cursor.executemany(sql, seq_of_parameters)
|
|
91
|
-
return result
|
|
92
|
-
|
|
93
|
-
def get_all_field_info(self, tablename):
|
|
94
|
-
"""
|
|
95
|
-
获取字段详细信息
|
|
96
|
-
:param tablename:
|
|
97
|
-
:return:
|
|
98
|
-
"""
|
|
99
|
-
sql = "PRAGMA table_info({})".format(tablename)
|
|
100
|
-
result = self.execute(sql)
|
|
101
|
-
return result.fetchall()
|
|
102
|
-
|
|
103
|
-
def get_all_field(self, tablename):
|
|
104
|
-
"""
|
|
105
|
-
仅仅获取字段
|
|
106
|
-
:param tablename:
|
|
107
|
-
:return:
|
|
108
|
-
"""
|
|
109
|
-
listinfo = self.get_all_field_info(tablename)
|
|
110
|
-
return [row[1] for row in listinfo]
|
|
111
|
-
|
|
112
|
-
def get_table_name(self):
|
|
113
|
-
"""
|
|
114
|
-
获取表名
|
|
115
|
-
:return:
|
|
116
|
-
"""
|
|
117
|
-
sql = "select name from sqlite_master where type='table' order by name;"
|
|
118
|
-
result = self.execute(sql)
|
|
119
|
-
return result.fetchall()
|
|
120
|
-
|
|
121
|
-
def get_rowcount(self, ) -> int:
|
|
122
|
-
"""
|
|
123
|
-
获取sql语句影响的行数
|
|
124
|
-
:param cursor: 游标对象
|
|
125
|
-
:return: 影响的行数
|
|
126
|
-
"""
|
|
127
|
-
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
128
|
-
num = self.cursor.rowcount
|
|
129
|
-
return num
|
|
130
|
-
|
|
131
|
-
def close_cursor(self) -> None:
|
|
132
|
-
"""
|
|
133
|
-
关闭游标
|
|
134
|
-
:param cursor: 游标
|
|
135
|
-
:return: None
|
|
136
|
-
"""
|
|
137
|
-
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
138
|
-
self.cursor.close()
|
|
139
|
-
|
|
140
|
-
def my_commit(self) -> None:
|
|
141
|
-
"""
|
|
142
|
-
提交
|
|
143
|
-
:param connect: 连接
|
|
144
|
-
:return: None
|
|
145
|
-
"""
|
|
146
|
-
assert isinstance(self.db, sqlite3.Connection)
|
|
147
|
-
self.db.commit()
|
|
148
|
-
|
|
149
|
-
def close_connect(self) -> None:
|
|
150
|
-
"""
|
|
151
|
-
链接关闭
|
|
152
|
-
:param connect: 连接
|
|
153
|
-
:return: None
|
|
154
|
-
"""
|
|
155
|
-
assert isinstance(self.db, sqlite3.Connection)
|
|
156
|
-
self.db.close()
|
|
157
|
-
|
|
158
|
-
def __del__(self):
|
|
159
|
-
self.close_connect()
|
|
160
|
-
|
|
161
|
-
@classmethod
|
|
162
|
-
def sqlite3_merge(cls, inpath, attachpath, tablename="modify_title_info_zt"):
|
|
163
|
-
"""
|
|
164
|
-
合并两个db3
|
|
165
|
-
:param inpath:
|
|
166
|
-
:param attachpath:
|
|
167
|
-
:return:
|
|
168
|
-
"""
|
|
169
|
-
conn = sqlite3.connect(inpath)
|
|
170
|
-
conn.text_factory = str
|
|
171
|
-
cur = conn.cursor()
|
|
172
|
-
attach = 'attach database "' + attachpath + '" as w;'
|
|
173
|
-
sql1 = 'insert into {} select * from w.{};'.format(tablename, tablename)
|
|
174
|
-
cur.execute(attach)
|
|
175
|
-
cur.execute(sql1)
|
|
176
|
-
conn.commit()
|
|
177
|
-
cur.close()
|
|
178
|
-
conn.close()
|
|
179
|
-
|
|
180
|
-
def create_table(self, tablename, fields: list):
|
|
181
|
-
if self.cursor == '':
|
|
182
|
-
self.get_cursor()
|
|
183
|
-
sql = "PRAGMA foreign_keys = false;"
|
|
184
|
-
self.execute(sql)
|
|
185
|
-
sql = f'DROP TABLE IF EXISTS "{tablename}";'
|
|
186
|
-
self.execute(sql)
|
|
187
|
-
strings = ""
|
|
188
|
-
for field in fields:
|
|
189
|
-
strings = strings + f'"{field}" TEXT,'
|
|
190
|
-
strings = strings.rstrip(',')
|
|
191
|
-
sql = f'CREATE TABLE "{tablename}"({strings});'
|
|
192
|
-
self.execute(sql)
|
|
193
|
-
sql = 'PRAGMA foreign_keys = true;'
|
|
194
|
-
self.execute(sql)
|
|
1
|
+
import sqlite3
|
|
2
|
+
|
|
3
|
+
from re_common.baselibrary.database.moudle import Sqlite3Moudle
|
|
4
|
+
from re_common.baselibrary.database.sql_factory import SqlFactory
|
|
5
|
+
from re_common.baselibrary.utils.basedict import BaseDicts
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def dict_factory(cursor, row):
|
|
9
|
+
"""
|
|
10
|
+
设置返回字典
|
|
11
|
+
:param row:
|
|
12
|
+
:return:
|
|
13
|
+
"""
|
|
14
|
+
d = {}
|
|
15
|
+
for index, col in enumerate(cursor.description):
|
|
16
|
+
d[col[0]] = row[index]
|
|
17
|
+
return d
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class Sqlite3(SqlFactory):
|
|
21
|
+
def __init__(self):
|
|
22
|
+
# 就是conn
|
|
23
|
+
self.db = ''
|
|
24
|
+
self.cursor = ''
|
|
25
|
+
self.sqlite3_moudle = {}
|
|
26
|
+
|
|
27
|
+
def set_result_dict(self):
|
|
28
|
+
def dict_factory(cursor, row):
|
|
29
|
+
d = {}
|
|
30
|
+
for idx, col in enumerate(cursor.description):
|
|
31
|
+
d[col[0]] = row[idx]
|
|
32
|
+
return d
|
|
33
|
+
|
|
34
|
+
self.db.row_factory = dict_factory
|
|
35
|
+
self.get_cursor()
|
|
36
|
+
return self
|
|
37
|
+
|
|
38
|
+
def set_encoding(self, bytes=False, encoding="gbk"):
|
|
39
|
+
"""
|
|
40
|
+
https://blog.csdn.net/xkxjy/article/details/8179479
|
|
41
|
+
在不知道编码格式的情况下 使用bytes 但我没有成功
|
|
42
|
+
:param bytes:
|
|
43
|
+
:param encoding:
|
|
44
|
+
:return:
|
|
45
|
+
"""
|
|
46
|
+
# if bytes:
|
|
47
|
+
# self.db.text_factory = bytes
|
|
48
|
+
# else:
|
|
49
|
+
# self.db.text_factory = lambda x: str(x, encoding, 'ignore')
|
|
50
|
+
self.db.text_factory = lambda x: str(x, encoding, 'ignore')
|
|
51
|
+
|
|
52
|
+
def link(self, sqlite3_moudle: Sqlite3Moudle):
|
|
53
|
+
"""
|
|
54
|
+
连接数据库
|
|
55
|
+
:param sqlite3_moudle:
|
|
56
|
+
:param mysqlmoudle:
|
|
57
|
+
:return:
|
|
58
|
+
"""
|
|
59
|
+
self.sqlite3_moudle = sqlite3_moudle
|
|
60
|
+
# 返回连接对象
|
|
61
|
+
dicts = sqlite3_moudle.to_dict()
|
|
62
|
+
dicts = BaseDicts.removeDictsNone(dicts)
|
|
63
|
+
self.db = sqlite3.connect(**dicts)
|
|
64
|
+
self.cursor = self.db.cursor()
|
|
65
|
+
return self.db, self.cursor
|
|
66
|
+
|
|
67
|
+
def get_cursor(self) -> sqlite3.Cursor:
|
|
68
|
+
"""
|
|
69
|
+
本函数通过链接返回sqlite3的游标
|
|
70
|
+
:param connect: 传入的是sqlite3的连接
|
|
71
|
+
:return: 返回游标
|
|
72
|
+
"""
|
|
73
|
+
assert isinstance(self.db, sqlite3.Connection)
|
|
74
|
+
self.cursor = self.db.cursor()
|
|
75
|
+
return self.cursor
|
|
76
|
+
|
|
77
|
+
def execute(self, sql: str) -> sqlite3.Cursor:
|
|
78
|
+
"""
|
|
79
|
+
通过游标对象执行sql语句并返回结果
|
|
80
|
+
:param cursor: 游标对象
|
|
81
|
+
:param sql: 需要执行的sql语句
|
|
82
|
+
:return: 返回结果的游标对象
|
|
83
|
+
"""
|
|
84
|
+
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
85
|
+
result = self.cursor.execute(sql)
|
|
86
|
+
return result
|
|
87
|
+
|
|
88
|
+
def executemany(self, sql: str, seq_of_parameters) -> sqlite3.Cursor:
|
|
89
|
+
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
90
|
+
result = self.cursor.executemany(sql, seq_of_parameters)
|
|
91
|
+
return result
|
|
92
|
+
|
|
93
|
+
def get_all_field_info(self, tablename):
|
|
94
|
+
"""
|
|
95
|
+
获取字段详细信息
|
|
96
|
+
:param tablename:
|
|
97
|
+
:return:
|
|
98
|
+
"""
|
|
99
|
+
sql = "PRAGMA table_info({})".format(tablename)
|
|
100
|
+
result = self.execute(sql)
|
|
101
|
+
return result.fetchall()
|
|
102
|
+
|
|
103
|
+
def get_all_field(self, tablename):
|
|
104
|
+
"""
|
|
105
|
+
仅仅获取字段
|
|
106
|
+
:param tablename:
|
|
107
|
+
:return:
|
|
108
|
+
"""
|
|
109
|
+
listinfo = self.get_all_field_info(tablename)
|
|
110
|
+
return [row[1] for row in listinfo]
|
|
111
|
+
|
|
112
|
+
def get_table_name(self):
|
|
113
|
+
"""
|
|
114
|
+
获取表名
|
|
115
|
+
:return:
|
|
116
|
+
"""
|
|
117
|
+
sql = "select name from sqlite_master where type='table' order by name;"
|
|
118
|
+
result = self.execute(sql)
|
|
119
|
+
return result.fetchall()
|
|
120
|
+
|
|
121
|
+
def get_rowcount(self, ) -> int:
|
|
122
|
+
"""
|
|
123
|
+
获取sql语句影响的行数
|
|
124
|
+
:param cursor: 游标对象
|
|
125
|
+
:return: 影响的行数
|
|
126
|
+
"""
|
|
127
|
+
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
128
|
+
num = self.cursor.rowcount
|
|
129
|
+
return num
|
|
130
|
+
|
|
131
|
+
def close_cursor(self) -> None:
|
|
132
|
+
"""
|
|
133
|
+
关闭游标
|
|
134
|
+
:param cursor: 游标
|
|
135
|
+
:return: None
|
|
136
|
+
"""
|
|
137
|
+
assert isinstance(self.cursor, sqlite3.Cursor)
|
|
138
|
+
self.cursor.close()
|
|
139
|
+
|
|
140
|
+
def my_commit(self) -> None:
|
|
141
|
+
"""
|
|
142
|
+
提交
|
|
143
|
+
:param connect: 连接
|
|
144
|
+
:return: None
|
|
145
|
+
"""
|
|
146
|
+
assert isinstance(self.db, sqlite3.Connection)
|
|
147
|
+
self.db.commit()
|
|
148
|
+
|
|
149
|
+
def close_connect(self) -> None:
|
|
150
|
+
"""
|
|
151
|
+
链接关闭
|
|
152
|
+
:param connect: 连接
|
|
153
|
+
:return: None
|
|
154
|
+
"""
|
|
155
|
+
assert isinstance(self.db, sqlite3.Connection)
|
|
156
|
+
self.db.close()
|
|
157
|
+
|
|
158
|
+
def __del__(self):
|
|
159
|
+
self.close_connect()
|
|
160
|
+
|
|
161
|
+
@classmethod
|
|
162
|
+
def sqlite3_merge(cls, inpath, attachpath, tablename="modify_title_info_zt"):
|
|
163
|
+
"""
|
|
164
|
+
合并两个db3
|
|
165
|
+
:param inpath:
|
|
166
|
+
:param attachpath:
|
|
167
|
+
:return:
|
|
168
|
+
"""
|
|
169
|
+
conn = sqlite3.connect(inpath)
|
|
170
|
+
conn.text_factory = str
|
|
171
|
+
cur = conn.cursor()
|
|
172
|
+
attach = 'attach database "' + attachpath + '" as w;'
|
|
173
|
+
sql1 = 'insert into {} select * from w.{};'.format(tablename, tablename)
|
|
174
|
+
cur.execute(attach)
|
|
175
|
+
cur.execute(sql1)
|
|
176
|
+
conn.commit()
|
|
177
|
+
cur.close()
|
|
178
|
+
conn.close()
|
|
179
|
+
|
|
180
|
+
def create_table(self, tablename, fields: list):
|
|
181
|
+
if self.cursor == '':
|
|
182
|
+
self.get_cursor()
|
|
183
|
+
sql = "PRAGMA foreign_keys = false;"
|
|
184
|
+
self.execute(sql)
|
|
185
|
+
sql = f'DROP TABLE IF EXISTS "{tablename}";'
|
|
186
|
+
self.execute(sql)
|
|
187
|
+
strings = ""
|
|
188
|
+
for field in fields:
|
|
189
|
+
strings = strings + f'"{field}" TEXT,'
|
|
190
|
+
strings = strings.rstrip(',')
|
|
191
|
+
sql = f'CREATE TABLE "{tablename}"({strings});'
|
|
192
|
+
self.execute(sql)
|
|
193
|
+
sql = 'PRAGMA foreign_keys = true;'
|
|
194
|
+
self.execute(sql)
|