mdbq 4.0.37__py3-none-any.whl → 4.0.38__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/__version__.py CHANGED
@@ -1 +1 @@
1
- VERSION = '4.0.37'
1
+ VERSION = '4.0.38'
mdbq/mysql/uploader.py CHANGED
@@ -1753,6 +1753,75 @@ class MySQLUploader:
1753
1753
  def __exit__(self, exc_type, exc_val, exc_tb):
1754
1754
  self.close()
1755
1755
 
1756
+ # @_execute_with_retry
1757
+ def execute_query(self, sql: str, params: Optional[Tuple] = None) -> List[Dict]:
1758
+ """
1759
+ 执行查询SQL语句并返回结果
1760
+
1761
+ :param sql: SQL查询语句
1762
+ :param params: SQL参数,可选
1763
+ :return: 查询结果列表,每个元素为字典格式
1764
+ :raises: 可能抛出数据库相关异常
1765
+ """
1766
+ if not sql or not isinstance(sql, str):
1767
+ logger.error('无效的SQL语句', {'sql': sql})
1768
+ raise ValueError('SQL语句不能为空且必须是字符串')
1769
+
1770
+ try:
1771
+ with self._get_connection() as conn:
1772
+ with conn.cursor() as cursor:
1773
+ cursor.execute(sql, params)
1774
+ results = cursor.fetchall()
1775
+ logger.debug('查询执行成功', {
1776
+ 'sql': self._shorten_for_log(sql, 100),
1777
+ 'params': self._shorten_for_log(params, 50),
1778
+ '结果数量': len(results)
1779
+ })
1780
+ return results
1781
+ except Exception as e:
1782
+ logger.error('执行查询时出错', {
1783
+ 'sql': self._shorten_for_log(sql, 100),
1784
+ 'params': self._shorten_for_log(params, 50),
1785
+ 'error': str(e)
1786
+ })
1787
+ raise
1788
+
1789
+ # @_execute_with_retry
1790
+ def execute_update(self, sql: str, params: Optional[Tuple] = None) -> int:
1791
+ """
1792
+ 执行更新SQL语句(INSERT、UPDATE、DELETE)并返回影响的行数
1793
+
1794
+ :param sql: SQL更新语句
1795
+ :param params: SQL参数,可选
1796
+ :return: 影响的行数
1797
+ :raises: 可能抛出数据库相关异常
1798
+ """
1799
+ if not sql or not isinstance(sql, str):
1800
+ logger.error('无效的SQL语句', {'sql': sql})
1801
+ raise ValueError('SQL语句不能为空且必须是字符串')
1802
+
1803
+ conn = None
1804
+ try:
1805
+ with self._get_connection() as conn:
1806
+ with conn.cursor() as cursor:
1807
+ affected_rows = cursor.execute(sql, params)
1808
+ conn.commit()
1809
+ logger.debug('更新执行成功', {
1810
+ 'sql': self._shorten_for_log(sql, 100),
1811
+ 'params': self._shorten_for_log(params, 50),
1812
+ '影响行数': affected_rows
1813
+ })
1814
+ return affected_rows
1815
+ except Exception as e:
1816
+ logger.error('执行更新时出错', {
1817
+ 'sql': self._shorten_for_log(sql, 100),
1818
+ 'params': self._shorten_for_log(params, 50),
1819
+ 'error': str(e)
1820
+ })
1821
+ if conn is not None:
1822
+ conn.rollback()
1823
+ raise
1824
+
1756
1825
 
1757
1826
  def main():
1758
1827
  dir_path = os.path.expanduser("~")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.37
3
+ Version: 4.0.38
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,5 +1,5 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
- mdbq/__version__.py,sha256=1IAdkcLTP6Byg2amV6TPLMYX4EWf_WqqMKyIUbVRCfc,18
2
+ mdbq/__version__.py,sha256=U1WMRZvqWGnnlhMX5A6NKB6YnAmRd4rS3atED7bLCQo,18
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
4
  mdbq/aggregation/query_data.py,sha256=WtTFMN78jn43Y-nBTPAXhAK56w3wDuv_cj4YtzzGbZk,169797
5
5
  mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
@@ -11,7 +11,7 @@ mdbq/mysql/deduplicator.py,sha256=AB3gL7ZwhcmzGHSu4UY4M6YZVPFZ2wlAN3BCcwAhegQ,73
11
11
  mdbq/mysql/mysql.py,sha256=pDg771xBugCMSTWeskIFTi3pFLgaqgyG3smzf-86Wn8,56772
12
12
  mdbq/mysql/s_query.py,sha256=1wJ3HVjHEF6FA-bVeeesRlsf73CZSvVTEQ51CF1OsE4,46786
13
13
  mdbq/mysql/unique_.py,sha256=MaztT-WIyEQUs-OOYY4pFulgHVcXR1BfCy3QUz0XM_U,21127
14
- mdbq/mysql/uploader.py,sha256=SVlrLxoYBEpTu_I771wAehJQVFWOCqXp-lNk2JNYFOE,81881
14
+ mdbq/mysql/uploader.py,sha256=defQ4xCC3j8an9dWjFI3q_Fec0Irewe2FzBZqFL1GJM,84673
15
15
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
16
16
  mdbq/other/download_sku_picture.py,sha256=X66sVdvVgzoNzmgVJyPtd7bjEvctEKtLPblEPF65EWc,46940
17
17
  mdbq/other/error_handler.py,sha256=4p5haAXSY-P78stp4Xwo_MwAngWYqyKj5ogWIuYXMeY,12631
@@ -25,7 +25,7 @@ mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
25
25
  mdbq/redis/getredis.py,sha256=vpBuNc22uj9Vr-_Dh25_wpwWM1e-072EAAIBdB_IpL0,23494
26
26
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
27
27
  mdbq/spider/aikucun.py,sha256=XptHjGzbout9IYzWAOQUpMMV5qEgLTU8pL1ZGt8oNEA,21868
28
- mdbq-4.0.37.dist-info/METADATA,sha256=PUJcSDuxE3fJkdK9-9ovfVDiCmFnwpd5HNuxblXBJC0,364
29
- mdbq-4.0.37.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
30
- mdbq-4.0.37.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
31
- mdbq-4.0.37.dist-info/RECORD,,
28
+ mdbq-4.0.38.dist-info/METADATA,sha256=edMyLlQlfms58lylwf4zSHXWbqA8C9jFwJ-YHT-p_cs,364
29
+ mdbq-4.0.38.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
30
+ mdbq-4.0.38.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
31
+ mdbq-4.0.38.dist-info/RECORD,,
File without changes