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.
Files changed (217) hide show
  1. re_common/baselibrary/__init__.py +4 -4
  2. re_common/baselibrary/baseabs/__init__.py +6 -6
  3. re_common/baselibrary/baseabs/baseabs.py +26 -26
  4. re_common/baselibrary/database/mbuilder.py +132 -132
  5. re_common/baselibrary/database/moudle.py +93 -93
  6. re_common/baselibrary/database/msqlite3.py +194 -194
  7. re_common/baselibrary/database/mysql.py +169 -169
  8. re_common/baselibrary/database/sql_factory.py +26 -26
  9. re_common/baselibrary/mthread/MThreadingRun.py +486 -486
  10. re_common/baselibrary/mthread/MThreadingRunEvent.py +349 -349
  11. re_common/baselibrary/mthread/__init__.py +2 -2
  12. re_common/baselibrary/mthread/mythreading.py +695 -695
  13. re_common/baselibrary/pakge_other/socks.py +404 -404
  14. re_common/baselibrary/readconfig/config_factory.py +18 -18
  15. re_common/baselibrary/readconfig/ini_config.py +317 -317
  16. re_common/baselibrary/readconfig/toml_config.py +49 -49
  17. re_common/baselibrary/temporary/envdata.py +36 -36
  18. re_common/baselibrary/tools/all_requests/aiohttp_request.py +118 -118
  19. re_common/baselibrary/tools/all_requests/httpx_requet.py +102 -102
  20. re_common/baselibrary/tools/all_requests/mrequest.py +412 -412
  21. re_common/baselibrary/tools/all_requests/requests_request.py +81 -81
  22. re_common/baselibrary/tools/batch_compre/bijiao_batch.py +31 -31
  23. re_common/baselibrary/tools/contrast_db3.py +123 -123
  24. re_common/baselibrary/tools/copy_file.py +39 -39
  25. re_common/baselibrary/tools/db3_2_sizedb3.py +102 -102
  26. re_common/baselibrary/tools/foreachgz.py +39 -39
  27. re_common/baselibrary/tools/get_attr.py +10 -10
  28. re_common/baselibrary/tools/image_to_pdf.py +61 -61
  29. re_common/baselibrary/tools/java_code_deal.py +139 -139
  30. re_common/baselibrary/tools/javacode.py +79 -79
  31. re_common/baselibrary/tools/mdb_db3.py +48 -48
  32. re_common/baselibrary/tools/merge_file.py +171 -171
  33. re_common/baselibrary/tools/merge_gz_file.py +165 -165
  34. re_common/baselibrary/tools/mhdfstools/down_hdfs_files.py +42 -42
  35. re_common/baselibrary/tools/mhdfstools/hdfst.py +42 -42
  36. re_common/baselibrary/tools/mhdfstools/up_hdfs_files.py +38 -38
  37. re_common/baselibrary/tools/mongo_tools.py +50 -50
  38. re_common/baselibrary/tools/move_file.py +170 -170
  39. re_common/baselibrary/tools/move_mongo/mongo_table_to_file.py +63 -63
  40. re_common/baselibrary/tools/move_mongo/move_mongo_table.py +354 -354
  41. re_common/baselibrary/tools/move_mongo/use_mttf.py +18 -18
  42. re_common/baselibrary/tools/move_mongo/use_mv.py +93 -93
  43. re_common/baselibrary/tools/mpandas/mpandasreadexcel.py +125 -125
  44. re_common/baselibrary/tools/mpandas/pandas_visualization.py +7 -7
  45. re_common/baselibrary/tools/myparsel.py +104 -104
  46. re_common/baselibrary/tools/rename_dir_file.py +37 -37
  47. re_common/baselibrary/tools/sequoiadb_utils.py +398 -398
  48. re_common/baselibrary/tools/split_line_to_many.py +25 -25
  49. re_common/baselibrary/tools/stringtodicts.py +33 -33
  50. re_common/baselibrary/tools/workwechant_bot.py +84 -84
  51. re_common/baselibrary/utils/baseaiohttp.py +296 -296
  52. re_common/baselibrary/utils/baseaiomysql.py +87 -87
  53. re_common/baselibrary/utils/baseallstep.py +191 -191
  54. re_common/baselibrary/utils/baseavro.py +19 -19
  55. re_common/baselibrary/utils/baseboto3.py +291 -291
  56. re_common/baselibrary/utils/basecsv.py +32 -32
  57. re_common/baselibrary/utils/basedict.py +133 -133
  58. re_common/baselibrary/utils/basedir.py +241 -241
  59. re_common/baselibrary/utils/baseencode.py +351 -351
  60. re_common/baselibrary/utils/baseencoding.py +28 -28
  61. re_common/baselibrary/utils/baseesdsl.py +86 -86
  62. re_common/baselibrary/utils/baseexcel.py +264 -264
  63. re_common/baselibrary/utils/baseexcept.py +109 -109
  64. re_common/baselibrary/utils/basefile.py +654 -654
  65. re_common/baselibrary/utils/baseftp.py +214 -214
  66. re_common/baselibrary/utils/basegzip.py +60 -60
  67. re_common/baselibrary/utils/basehdfs.py +135 -135
  68. re_common/baselibrary/utils/basehttpx.py +268 -268
  69. re_common/baselibrary/utils/baseip.py +87 -87
  70. re_common/baselibrary/utils/basejson.py +2 -2
  71. re_common/baselibrary/utils/baselist.py +32 -32
  72. re_common/baselibrary/utils/basemotor.py +190 -190
  73. re_common/baselibrary/utils/basemssql.py +98 -98
  74. re_common/baselibrary/utils/baseodbc.py +113 -113
  75. re_common/baselibrary/utils/basepandas.py +302 -302
  76. re_common/baselibrary/utils/basepeewee.py +11 -11
  77. re_common/baselibrary/utils/basepika.py +180 -180
  78. re_common/baselibrary/utils/basepydash.py +143 -143
  79. re_common/baselibrary/utils/basepymongo.py +230 -230
  80. re_common/baselibrary/utils/basequeue.py +22 -22
  81. re_common/baselibrary/utils/baserar.py +57 -57
  82. re_common/baselibrary/utils/baserequest.py +279 -279
  83. re_common/baselibrary/utils/baseset.py +8 -8
  84. re_common/baselibrary/utils/basesmb.py +403 -403
  85. re_common/baselibrary/utils/basestring.py +382 -382
  86. re_common/baselibrary/utils/basetime.py +320 -320
  87. re_common/baselibrary/utils/baseurl.py +121 -121
  88. re_common/baselibrary/utils/basezip.py +57 -57
  89. re_common/baselibrary/utils/core/__init__.py +7 -7
  90. re_common/baselibrary/utils/core/bottomutils.py +18 -18
  91. re_common/baselibrary/utils/core/mdeprecated.py +327 -327
  92. re_common/baselibrary/utils/core/mlamada.py +16 -16
  93. re_common/baselibrary/utils/core/msginfo.py +25 -25
  94. re_common/baselibrary/utils/core/requests_core.py +103 -103
  95. re_common/baselibrary/utils/fateadm.py +429 -429
  96. re_common/baselibrary/utils/importfun.py +123 -123
  97. re_common/baselibrary/utils/mfaker.py +57 -57
  98. re_common/baselibrary/utils/my_abc/__init__.py +3 -3
  99. re_common/baselibrary/utils/my_abc/better_abc.py +32 -32
  100. re_common/baselibrary/utils/mylogger.py +414 -414
  101. re_common/baselibrary/utils/myredisclient.py +861 -861
  102. re_common/baselibrary/utils/pipupgrade.py +21 -21
  103. re_common/baselibrary/utils/ringlist.py +85 -85
  104. re_common/baselibrary/utils/version_compare.py +36 -36
  105. re_common/baselibrary/utils/ydmhttp.py +126 -126
  106. re_common/facade/lazy_import.py +11 -11
  107. re_common/facade/loggerfacade.py +25 -25
  108. re_common/facade/mysqlfacade.py +467 -467
  109. re_common/facade/now.py +31 -31
  110. re_common/facade/sqlite3facade.py +257 -257
  111. re_common/facade/use/mq_use_facade.py +83 -83
  112. re_common/facade/use/proxy_use_facade.py +19 -19
  113. re_common/libtest/base_dict_test.py +19 -19
  114. re_common/libtest/baseavro_test.py +13 -13
  115. re_common/libtest/basefile_test.py +14 -14
  116. re_common/libtest/basemssql_test.py +77 -77
  117. re_common/libtest/baseodbc_test.py +7 -7
  118. re_common/libtest/basepandas_test.py +38 -38
  119. re_common/libtest/get_attr_test/get_attr_test_settings.py +14 -14
  120. re_common/libtest/get_attr_test/settings.py +54 -54
  121. re_common/libtest/idencode_test.py +53 -53
  122. re_common/libtest/iniconfig_test.py +35 -35
  123. re_common/libtest/ip_test.py +34 -34
  124. re_common/libtest/merge_file_test.py +20 -20
  125. re_common/libtest/mfaker_test.py +8 -8
  126. re_common/libtest/mm3_test.py +31 -31
  127. re_common/libtest/mylogger_test.py +88 -88
  128. re_common/libtest/myparsel_test.py +27 -27
  129. re_common/libtest/mysql_test.py +151 -151
  130. re_common/libtest/pymongo_test.py +21 -21
  131. re_common/libtest/split_test.py +11 -11
  132. re_common/libtest/sqlite3_merge_test.py +5 -5
  133. re_common/libtest/sqlite3_test.py +34 -34
  134. re_common/libtest/tomlconfig_test.py +30 -30
  135. re_common/libtest/use_tools_test/__init__.py +2 -2
  136. re_common/libtest/user/__init__.py +4 -4
  137. re_common/studio/__init__.py +4 -4
  138. re_common/studio/assignment_expressions.py +36 -36
  139. re_common/studio/mydash/test1.py +18 -18
  140. re_common/studio/pydashstudio/first.py +9 -9
  141. re_common/studio/streamlitstudio/first_app.py +65 -65
  142. re_common/studio/streamlitstudio/uber_pickups.py +23 -23
  143. re_common/studio/test.py +18 -18
  144. re_common/v2/baselibrary/business_utils/BusinessStringUtil.py +219 -219
  145. re_common/v2/baselibrary/business_utils/baseencodeid.py +100 -100
  146. re_common/v2/baselibrary/business_utils/full_doi_path.py +116 -116
  147. re_common/v2/baselibrary/business_utils/rel_tools.py +6 -6
  148. re_common/v2/baselibrary/decorators/utils.py +59 -59
  149. re_common/v2/baselibrary/helpers/search_packge/NearestNeighbors_test.py +105 -105
  150. re_common/v2/baselibrary/helpers/search_packge/fit_text_match.py +253 -253
  151. re_common/v2/baselibrary/helpers/search_packge/scikit_learn_text_matcher.py +260 -260
  152. re_common/v2/baselibrary/helpers/search_packge/test.py +1 -1
  153. re_common/v2/baselibrary/s3object/baseboto3.py +230 -230
  154. re_common/v2/baselibrary/tools/WeChatRobot.py +95 -95
  155. re_common/v2/baselibrary/tools/ac_ahocorasick.py +75 -75
  156. re_common/v2/baselibrary/tools/concurrency.py +35 -35
  157. re_common/v2/baselibrary/tools/data_processer/base.py +53 -53
  158. re_common/v2/baselibrary/tools/data_processer/data_processer.py +508 -508
  159. re_common/v2/baselibrary/tools/data_processer/data_reader.py +187 -187
  160. re_common/v2/baselibrary/tools/data_processer/data_writer.py +38 -38
  161. re_common/v2/baselibrary/tools/dict_tools.py +44 -44
  162. re_common/v2/baselibrary/tools/dolphinscheduler.py +187 -187
  163. re_common/v2/baselibrary/tools/hdfs_base_processor.py +204 -204
  164. re_common/v2/baselibrary/tools/hdfs_bulk_processor.py +67 -67
  165. re_common/v2/baselibrary/tools/hdfs_data_processer.py +338 -338
  166. re_common/v2/baselibrary/tools/hdfs_line_processor.py +74 -74
  167. re_common/v2/baselibrary/tools/list_tools.py +69 -69
  168. re_common/v2/baselibrary/tools/resume_tracker.py +94 -94
  169. re_common/v2/baselibrary/tools/search_hash_tools.py +54 -54
  170. re_common/v2/baselibrary/tools/text_matcher.py +326 -326
  171. re_common/v2/baselibrary/tools/unionfind_tools.py +60 -60
  172. re_common/v2/baselibrary/utils/BusinessStringUtil.py +196 -196
  173. re_common/v2/baselibrary/utils/api_net_utils.py +270 -270
  174. re_common/v2/baselibrary/utils/author_smi.py +361 -361
  175. re_common/v2/baselibrary/utils/base_string_similarity.py +158 -158
  176. re_common/v2/baselibrary/utils/basedict.py +37 -37
  177. re_common/v2/baselibrary/utils/basehdfs.py +163 -163
  178. re_common/v2/baselibrary/utils/basepika.py +180 -180
  179. re_common/v2/baselibrary/utils/basetime.py +77 -77
  180. re_common/v2/baselibrary/utils/db.py +156 -156
  181. re_common/v2/baselibrary/utils/json_cls.py +16 -16
  182. re_common/v2/baselibrary/utils/mq.py +83 -83
  183. re_common/v2/baselibrary/utils/n_ary_expression_tree.py +243 -243
  184. re_common/v2/baselibrary/utils/string_bool.py +186 -186
  185. re_common/v2/baselibrary/utils/string_clear.py +246 -246
  186. re_common/v2/baselibrary/utils/string_smi.py +18 -18
  187. re_common/v2/baselibrary/utils/stringutils.py +271 -278
  188. re_common/vip/base_step_process.py +11 -11
  189. re_common/vip/baseencodeid.py +90 -90
  190. re_common/vip/changetaskname.py +28 -28
  191. re_common/vip/core_var.py +24 -24
  192. re_common/vip/mmh3Hash.py +89 -89
  193. re_common/vip/proxy/allproxys.py +127 -127
  194. re_common/vip/proxy/allproxys_thread.py +159 -159
  195. re_common/vip/proxy/cnki_proxy.py +153 -153
  196. re_common/vip/proxy/kuaidaili.py +87 -87
  197. re_common/vip/proxy/proxy_all.py +113 -113
  198. re_common/vip/proxy/update_kuaidaili_0.py +42 -42
  199. re_common/vip/proxy/wanfang_proxy.py +152 -152
  200. re_common/vip/proxy/wp_proxy_all.py +181 -181
  201. re_common/vip/read_rawid_to_txt.py +91 -91
  202. re_common/vip/title/__init__.py +5 -5
  203. re_common/vip/title/transform/TransformBookTitleToZt.py +125 -125
  204. re_common/vip/title/transform/TransformConferenceTitleToZt.py +139 -139
  205. re_common/vip/title/transform/TransformCstadTitleToZt.py +195 -195
  206. re_common/vip/title/transform/TransformJournalTitleToZt.py +203 -203
  207. re_common/vip/title/transform/TransformPatentTitleToZt.py +132 -132
  208. re_common/vip/title/transform/TransformRegulationTitleToZt.py +114 -114
  209. re_common/vip/title/transform/TransformStandardTitleToZt.py +135 -135
  210. re_common/vip/title/transform/TransformThesisTitleToZt.py +135 -135
  211. re_common/vip/title/transform/__init__.py +10 -10
  212. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/LICENSE +201 -201
  213. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/METADATA +16 -16
  214. re_common-10.0.39.dist-info/RECORD +248 -0
  215. {re_common-10.0.37.dist-info → re_common-10.0.39.dist-info}/WHEEL +1 -1
  216. re_common-10.0.37.dist-info/RECORD +0 -248
  217. {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)