lesscode-database 0.0.9__tar.gz → 0.0.11__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.
Files changed (19) hide show
  1. lesscode_database-0.0.9/README.md → lesscode_database-0.0.11/PKG-INFO +24 -1
  2. lesscode_database-0.0.9/PKG-INFO → lesscode_database-0.0.11/README.md +11 -14
  3. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/connect_pool.py +104 -26
  4. lesscode_database-0.0.11/lesscode_database/version.py +1 -0
  5. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/PKG-INFO +12 -2
  6. lesscode_database-0.0.9/lesscode_database/version.py +0 -1
  7. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/LICENSE +0 -0
  8. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/__init__.py +0 -0
  9. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/connection_info.py +0 -0
  10. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/db_options.py +0 -0
  11. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/db_request.py +0 -0
  12. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/ds_helper.py +0 -0
  13. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/dynamic_import_package.py +0 -0
  14. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database/mongo_base_model.py +0 -0
  15. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/SOURCES.txt +0 -0
  16. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/dependency_links.txt +0 -0
  17. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/lesscode_database.egg-info/top_level.txt +0 -0
  18. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/setup.cfg +0 -0
  19. {lesscode_database-0.0.9 → lesscode_database-0.0.11}/setup.py +0 -0
@@ -1,3 +1,16 @@
1
+ Metadata-Version: 2.1
2
+ Name: lesscode_database
3
+ Version: 0.0.11
4
+ Summary: lesscode_database是数据库连接工具包
5
+ Author: navysummer
6
+ Author-email: navysummer@yeah.net
7
+ Platform: python
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.6
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+
1
14
  # lesscode_database
2
15
 
3
16
  数据库连接工具包
@@ -44,13 +57,15 @@ db_options.conn_list = [
44
57
  ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
45
58
  password=None, db_name=1, enable=False, async_enable=True),
46
59
  # sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
47
- # 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
60
+ # 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle,dm
48
61
  ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
49
62
  password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
50
63
  ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
51
64
  password="neo4j", db_name=None, enable=False, async_enable=True),
52
65
  ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
53
66
  user="default", password="", db_name='', enable=True, async_enable=False),
67
+ ConnectionInfo(dialect="dm", name="dm", dsn=None, host="127.0.0.1", port=5236,
68
+ user="default", password="", db_name='', enable=True, async_enable=False),
54
69
 
55
70
  ]
56
71
 
@@ -345,4 +360,12 @@ async def async_esapi_test():
345
360
  loop = asyncio.get_event_loop()
346
361
  loop.run_until_complete(async_esapi_test())
347
362
 
363
+
364
+ # 达梦数据库 同步测试
365
+ with DsHelper("dm").pool.dedicated_connection() as conn:
366
+ with conn.cursor() as cursor:
367
+ cursor.execute('SELECT 1')
368
+ print(cursor.fetchall())
369
+
370
+
348
371
  ```
@@ -1,16 +1,3 @@
1
- Metadata-Version: 2.1
2
- Name: lesscode_database
3
- Version: 0.0.9
4
- Summary: lesscode_database是数据库连接工具包
5
- Author: navysummer
6
- Author-email: navysummer@yeah.net
7
- Platform: python
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.6
11
- Description-Content-Type: text/markdown
12
- License-File: LICENSE
13
-
14
1
  # lesscode_database
15
2
 
16
3
  数据库连接工具包
@@ -57,13 +44,15 @@ db_options.conn_list = [
57
44
  ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
58
45
  password=None, db_name=1, enable=False, async_enable=True),
59
46
  # sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
60
- # 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
47
+ # 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle,dm
61
48
  ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
62
49
  password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
63
50
  ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
64
51
  password="neo4j", db_name=None, enable=False, async_enable=True),
65
52
  ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
66
53
  user="default", password="", db_name='', enable=True, async_enable=False),
54
+ ConnectionInfo(dialect="dm", name="dm", dsn=None, host="127.0.0.1", port=5236,
55
+ user="default", password="", db_name='', enable=True, async_enable=False),
67
56
 
68
57
  ]
69
58
 
@@ -358,4 +347,12 @@ async def async_esapi_test():
358
347
  loop = asyncio.get_event_loop()
359
348
  loop.run_until_complete(async_esapi_test())
360
349
 
350
+
351
+ # 达梦数据库 同步测试
352
+ with DsHelper("dm").pool.dedicated_connection() as conn:
353
+ with conn.cursor() as cursor:
354
+ cursor.execute('SELECT 1')
355
+ print(cursor.fetchall())
356
+
357
+
361
358
  ```
@@ -3,6 +3,7 @@ import asyncio
3
3
  import importlib
4
4
  import ssl
5
5
  from inspect import iscoroutine
6
+ from xml.sax import parse
6
7
 
7
8
  from lesscode_database.connection_info import ConnectionInfo
8
9
  from lesscode_database.db_request import get_basic_auth
@@ -644,33 +645,92 @@ class Pool:
644
645
 
645
646
  @staticmethod
646
647
  async def create_clickhouse_pool(conn_info: ConnectionInfo):
647
- try:
648
- asynch = importlib.import_module("asynch")
649
- except ImportError:
650
- raise ImportError(f"asynch is not exist,run:pip install asynch")
651
- pool = await asynch.create_pool(minsize=conn_info.min_size, maxsize=conn_info.max_size,
652
- dsn=conn_info.dsn, host=conn_info.host,
653
- user=conn_info.user, password=conn_info.password,
654
- port=conn_info.port, database=conn_info.db_name)
648
+
649
+ params = conn_info.params if conn_info.params else {}
650
+ creator_type = params.pop("creator_type","asynch")
651
+ if creator_type == "clickhouse_connect":
652
+ try:
653
+ clickhouse_connect = importlib.import_module("clickhouse_connect")
654
+ except ImportError:
655
+ raise Exception(f"DBUtils is not exist,run:pip install clickhouse_connect==0.8.6")
656
+ pool = await clickhouse_connect.get_async_client(host=conn_info.host, port=conn_info.port,
657
+ username=conn_info.user,
658
+ password=conn_info.password, database=conn_info.db_name,
659
+ **params)
660
+
661
+
662
+ else:
663
+ try:
664
+ asynch = importlib.import_module("asynch")
665
+ except ImportError:
666
+ raise ImportError(f"asynch is not exist,run:pip install asynch")
667
+ pool = await asynch.create_pool(minsize=conn_info.min_size, maxsize=conn_info.max_size,
668
+ dsn=conn_info.dsn, host=conn_info.host,
669
+ user=conn_info.user, password=conn_info.password,
670
+ port=conn_info.port, database=conn_info.db_name)
655
671
  return pool
656
672
 
657
673
  @staticmethod
658
674
  def sync_create_clickhouse_pool(conn_info: ConnectionInfo):
675
+ params = conn_info.params if conn_info.params else {}
676
+ creator_type = params.pop("creator_type", "clickhouse_driver")
677
+ if creator_type == "clickhouse_connect":
678
+ try:
679
+ clickhouse_connect = importlib.import_module("clickhouse_connect")
680
+ except ImportError:
681
+ raise Exception(f"DBUtils is not exist,run:pip install clickhouse_connect==0.6.23")
682
+ params = conn_info.params
683
+ if not params:
684
+ params = dict()
685
+ pool = clickhouse_connect.get_client(host=conn_info.host, port=conn_info.port, username=conn_info.user,
686
+ password=conn_info.password, database=conn_info.db_name, **params)
687
+ else:
688
+ try:
689
+ pooled_db = importlib.import_module("dbutils.pooled_db")
690
+ except ImportError:
691
+ raise Exception(f"DBUtils is not exist,run:pip install DBUtils==3.0.2")
692
+ try:
693
+ clickhouse_driver = importlib.import_module("clickhouse_driver")
694
+ except ImportError:
695
+ raise Exception(f"clickhouse_driver is not exist,run:pip install clickhouse_driver")
696
+ params = conn_info.params
697
+ if not isinstance(params, dict):
698
+ params = dict()
699
+
700
+ pool = pooled_db.PooledDB(creator=clickhouse_driver.connect, host=conn_info.host, port=conn_info.port,
701
+ user=conn_info.user,
702
+ password=conn_info.password, database=conn_info.db_name or "default",
703
+ **params)
704
+
705
+ return pool
706
+
707
+ @staticmethod
708
+ def sync_create_dm_pool(conn_info: ConnectionInfo):
659
709
  try:
660
- pooled_db = importlib.import_module("dbutils.pooled_db")
710
+ dmPython = importlib.import_module("dmPython")
661
711
  except ImportError:
662
- raise Exception(f"DBUtils is not exist,run:pip install DBUtils==3.0.2")
712
+ raise Exception(f"dmPython is not exist,run:pip install dmPython")
663
713
  try:
664
- clickhouse_driver = importlib.import_module("clickhouse_driver")
714
+ pooled_db = importlib.import_module("dbutils.pooled_db")
665
715
  except ImportError:
666
- raise Exception(f"clickhouse_driver is not exist,run:pip install clickhouse_driver")
716
+ raise Exception(f"DBUtils is not exist,run:pip install DBUtils==3.0.2")
667
717
  params = conn_info.params
668
718
  if not isinstance(params, dict):
669
719
  params = dict()
670
-
671
- pool = pooled_db.PooledDB(creator=clickhouse_driver.connect, host=conn_info.host, port=conn_info.port,
720
+ blocking = params.pop("blocking", True)
721
+ mincached = params.pop("mincached", conn_info.min_size)
722
+ maxusage = params.pop("maxusage", conn_info.min_size)
723
+ maxshared = params.pop("maxshared", conn_info.max_size)
724
+ maxcached = params.pop("maxcached", conn_info.max_size)
725
+ ping = params.pop("ping", 1)
726
+ autocommit = params.pop("autocommit", True)
727
+ pool = pooled_db.PooledDB(creator=dmPython, host=conn_info.host, port=conn_info.port,
672
728
  user=conn_info.user,
673
- password=conn_info.password, database=conn_info.db_name or "default",
729
+ password=conn_info.password, schema=conn_info.db_name,
730
+ mincached=mincached, blocking=blocking, maxusage=maxusage,
731
+ maxshared=maxshared, maxcached=maxcached,
732
+ ping=ping, maxconnections=conn_info.max_size,
733
+ autoCommit=autocommit,
674
734
  **params)
675
735
  return pool
676
736
 
@@ -734,10 +794,10 @@ class Pool:
734
794
  :param conn_info: 连接信息
735
795
  :return:
736
796
  """
797
+ db_type = "mysql"
737
798
  if conn_info.dsn:
738
799
  url = conn_info.dsn
739
800
  else:
740
- db_type = "mysql"
741
801
  if conn_info.params:
742
802
  if conn_info.params.get("db_type"):
743
803
  db_type = conn_info.params.pop("db_type")
@@ -771,23 +831,35 @@ class Pool:
771
831
  url = "oracle+cx_oracle://{}:{}@{}:{}/{}?charset=utf8mb4".format(
772
832
  conn_info.user, conn_info.password, conn_info.host, conn_info.port,
773
833
  conn_info.db_name)
834
+ elif db_type == "dm":
835
+ url = 'dm+dmPython://{}:{}@{}:{}'.format(
836
+ conn_info.user, conn_info.password, conn_info.host, conn_info.port)
774
837
  else:
775
838
  raise ImportError("UNSUPPORTED DB TYPE")
776
839
  try:
777
840
  sqlalchemy = importlib.import_module("sqlalchemy")
778
841
  except ImportError:
779
842
  raise ImportError(f"sqlalchemy is not exist,run:pip install sqlalchemy")
780
- engine = sqlalchemy.create_engine(url, echo=conn_info.params.get("echo",
781
- True) if conn_info.params else True,
843
+ params = conn_info.params
844
+ if not params:
845
+ params = dict()
846
+ echo = params.pop("echo", True)
847
+ pool_recycle = params.pop("pool_recycle", 3600)
848
+ max_overflow = params.pop("max_overflow", 0)
849
+ pool_timeout = params.pop("pool_timeout", 10)
850
+ pool_pre_ping = params.pop("pool_pre_ping", False)
851
+ if conn_info.db_name and db_type=="dm":
852
+ if "connect_args" not in params:
853
+ params["connect_args"] = {"schema": conn_info.db_name}
854
+ else:
855
+ params["connect_args"]["schema"] = conn_info.db_name
856
+
857
+ engine = sqlalchemy.create_engine(url, echo=echo,
782
858
  pool_size=conn_info.min_size,
783
- pool_recycle=conn_info.params.get("pool_recycle",
784
- 3600) if conn_info.params else 3600,
785
- max_overflow=conn_info.params.get("max_overflow",
786
- 0) if conn_info.params else 0,
787
- pool_timeout=conn_info.params.get("pool_timeout",
788
- 10) if conn_info.params else 10,
789
- pool_pre_ping=conn_info.params.get("pool_pre_ping",
790
- True) if conn_info.params else True)
859
+ pool_recycle=pool_recycle,
860
+ max_overflow=max_overflow,
861
+ pool_timeout=pool_timeout,
862
+ pool_pre_ping=pool_pre_ping)
791
863
  return engine
792
864
 
793
865
  @staticmethod
@@ -939,6 +1011,12 @@ def get_pool(conn_info: ConnectionInfo):
939
1011
  else:
940
1012
  return run_sync(Pool.sync_create_clickhouse_pool(conn_info)), conn_info
941
1013
 
1014
+ elif conn_info.dialect == "dm":
1015
+ if conn_info.async_enable:
1016
+ return run_sync(Pool.sync_create_dm_pool(conn_info)), conn_info
1017
+ else:
1018
+ return run_sync(Pool.sync_create_dm_pool(conn_info)), conn_info
1019
+
942
1020
  elif conn_info.dialect == "sqlalchemy":
943
1021
  if conn_info.async_enable:
944
1022
  return run_sync(Pool.create_sqlalchemy_pool(conn_info)), conn_info
@@ -0,0 +1 @@
1
+ __version__ = "0.0.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-database
3
- Version: 0.0.9
3
+ Version: 0.0.11
4
4
  Summary: lesscode_database是数据库连接工具包
5
5
  Author: navysummer
6
6
  Author-email: navysummer@yeah.net
@@ -57,13 +57,15 @@ db_options.conn_list = [
57
57
  ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
58
58
  password=None, db_name=1, enable=False, async_enable=True),
59
59
  # sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
60
- # 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
60
+ # 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle,dm
61
61
  ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
62
62
  password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
63
63
  ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
64
64
  password="neo4j", db_name=None, enable=False, async_enable=True),
65
65
  ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
66
66
  user="default", password="", db_name='', enable=True, async_enable=False),
67
+ ConnectionInfo(dialect="dm", name="dm", dsn=None, host="127.0.0.1", port=5236,
68
+ user="default", password="", db_name='', enable=True, async_enable=False),
67
69
 
68
70
  ]
69
71
 
@@ -358,4 +360,12 @@ async def async_esapi_test():
358
360
  loop = asyncio.get_event_loop()
359
361
  loop.run_until_complete(async_esapi_test())
360
362
 
363
+
364
+ # 达梦数据库 同步测试
365
+ with DsHelper("dm").pool.dedicated_connection() as conn:
366
+ with conn.cursor() as cursor:
367
+ cursor.execute('SELECT 1')
368
+ print(cursor.fetchall())
369
+
370
+
361
371
  ```
@@ -1 +0,0 @@
1
- __version__ = "0.0.9"