lesscode-database 0.0.3__tar.gz → 0.0.4__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.
Potentially problematic release.
This version of lesscode-database might be problematic. Click here for more details.
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/PKG-INFO +133 -17
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/README.md +132 -16
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database/connect_pool.py +270 -1
- lesscode_database-0.0.4/lesscode_database/version.py +1 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database.egg-info/PKG-INFO +133 -17
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/setup.py +2 -2
- lesscode_database-0.0.3/lesscode_database/version.py +0 -1
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/LICENSE +0 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database/__init__.py +0 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database/connection_info.py +0 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database/options.py +0 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database.egg-info/SOURCES.txt +0 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database.egg-info/dependency_links.txt +0 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database.egg-info/top_level.txt +0 -0
- {lesscode_database-0.0.3 → lesscode_database-0.0.4}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lesscode_database
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.4
|
|
4
4
|
Summary: lesscode_database是数据库连接工具包
|
|
5
5
|
Author: navysummer
|
|
6
6
|
Author-email: navysummer@yeah.net
|
|
@@ -20,7 +20,7 @@ License-File: LICENSE
|
|
|
20
20
|
```python
|
|
21
21
|
import asyncio
|
|
22
22
|
|
|
23
|
-
from sqlalchemy import
|
|
23
|
+
from sqlalchemy import select, Column, VARCHAR, INTEGER, Table, MetaData
|
|
24
24
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
|
25
25
|
from sqlalchemy.orm import sessionmaker
|
|
26
26
|
|
|
@@ -29,28 +29,42 @@ from lesscode_database.options import options
|
|
|
29
29
|
|
|
30
30
|
options.conn_list = [
|
|
31
31
|
ConnectionInfo(dialect="mysql", name="mysql", host="127.0.0.1", port=3306, user="root",
|
|
32
|
-
password="root", db_name="test", enable=
|
|
32
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
33
33
|
async_enable=True),
|
|
34
|
+
ConnectionInfo(dialect="doris", name="doris", host="127.0.0.1", port=9030, user="root",
|
|
35
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
36
|
+
async_enable=True),
|
|
37
|
+
ConnectionInfo(dialect="ocean_base", name="ocean_base", host="127.0.0.1", port=2883, user="root",
|
|
38
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
39
|
+
async_enable=True),
|
|
40
|
+
ConnectionInfo(dialect="tidb", name="tidb", host="127.0.0.1", port=4000, user="root",
|
|
41
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
42
|
+
async_enable=True),
|
|
43
|
+
ConnectionInfo(dialect="mssql", name="mssql", host="127.0.0.1", port=1433, user="root",
|
|
44
|
+
password="root", db_name="test", enable=False, async_enable=False),
|
|
45
|
+
ConnectionInfo(dialect="oracle", name="oracle", host="127.0.0.1", port=1521, user="root",
|
|
46
|
+
password="root", db_name="test", enable=False, async_enable=False),
|
|
47
|
+
ConnectionInfo(dialect="sqlite3", name="sqlite3", dsn="/test/test.db", async_enable=False),
|
|
34
48
|
ConnectionInfo(dialect="elasticsearch", name="es", host="127.0.0.1", port=9210, user="root",
|
|
35
|
-
password="root", enable=
|
|
49
|
+
password="root", enable=False, async_enable=True),
|
|
36
50
|
ConnectionInfo(dialect="mongo", name="mongo", host="127.0.0.1", port=27027, user="root",
|
|
37
|
-
password="root", enable=
|
|
51
|
+
password="root", enable=False, async_enable=True),
|
|
38
52
|
ConnectionInfo(dialect="nebula", name="nebula", host="127.0.0.1", port=9669, user="root",
|
|
39
|
-
password="nebula", db_name="nebula", enable=
|
|
53
|
+
password="nebula", db_name="nebula", enable=False),
|
|
40
54
|
ConnectionInfo(dialect="postgresql", host="127.0.0.1", port=5454, user="root", password="root",
|
|
41
|
-
db_name="root", enable=
|
|
55
|
+
db_name="root", enable=False, async_enable=True),
|
|
42
56
|
ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
|
|
43
|
-
password=None, db_name=1, enable=
|
|
57
|
+
password=None, db_name=1, enable=False, async_enable=True),
|
|
58
|
+
# sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
|
|
59
|
+
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
|
|
44
60
|
ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
|
|
45
|
-
password="root", db_name="test", enable=
|
|
61
|
+
password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
|
|
46
62
|
ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
|
|
47
|
-
password="neo4j", db_name=None, enable=
|
|
63
|
+
password="neo4j", db_name=None, enable=False, async_enable=True),
|
|
48
64
|
ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
|
|
49
65
|
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
50
66
|
|
|
51
67
|
]
|
|
52
|
-
# 获取数据库连接池的方式
|
|
53
|
-
## options.name name是ConnectionInfo的name,options.conn_list里所有的name不可重复
|
|
54
68
|
|
|
55
69
|
# mysql 同步测试,async_enable=False
|
|
56
70
|
with options.mysql.dedicated_connection() as conn:
|
|
@@ -74,6 +88,90 @@ async def async_mysql_test():
|
|
|
74
88
|
loop = asyncio.get_event_loop()
|
|
75
89
|
loop.run_until_complete(async_mysql_test())
|
|
76
90
|
|
|
91
|
+
# doris 同步测试,async_enable=False
|
|
92
|
+
with options.doris.dedicated_connection() as conn:
|
|
93
|
+
conn.ping(reconnect=True)
|
|
94
|
+
with conn.cursor() as cursor:
|
|
95
|
+
cursor.execute("select 1")
|
|
96
|
+
description = cursor.description
|
|
97
|
+
rs = cursor.fetchone()
|
|
98
|
+
print(rs)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# doris 异步测试,async_enable=True
|
|
102
|
+
async def async_doris_test():
|
|
103
|
+
async with options.doris.acquire() as conn:
|
|
104
|
+
async with conn.cursor() as cursor:
|
|
105
|
+
await cursor.execute("select 1")
|
|
106
|
+
rs = await cursor.fetchone()
|
|
107
|
+
print(rs)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
loop = asyncio.get_event_loop()
|
|
111
|
+
loop.run_until_complete(async_doris_test())
|
|
112
|
+
|
|
113
|
+
# ocean_base 同步测试,async_enable=False
|
|
114
|
+
with options.ocean_base.dedicated_connection() as conn:
|
|
115
|
+
conn.ping(reconnect=True)
|
|
116
|
+
with conn.cursor() as cursor:
|
|
117
|
+
cursor.execute("select 1")
|
|
118
|
+
description = cursor.description
|
|
119
|
+
rs = cursor.fetchone()
|
|
120
|
+
print(rs)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# ocean_base 异步测试,async_enable=True
|
|
124
|
+
async def async_ocean_base_test():
|
|
125
|
+
async with options.ocean_base.acquire() as conn:
|
|
126
|
+
async with conn.cursor() as cursor:
|
|
127
|
+
await cursor.execute("select 1")
|
|
128
|
+
rs = await cursor.fetchone()
|
|
129
|
+
print(rs)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
loop = asyncio.get_event_loop()
|
|
133
|
+
loop.run_until_complete(async_ocean_base_test())
|
|
134
|
+
|
|
135
|
+
# tidb 同步测试,async_enable=False
|
|
136
|
+
with options.tidb.dedicated_connection() as conn:
|
|
137
|
+
conn.ping(reconnect=True)
|
|
138
|
+
with conn.cursor() as cursor:
|
|
139
|
+
cursor.execute("select 1")
|
|
140
|
+
description = cursor.description
|
|
141
|
+
rs = cursor.fetchone()
|
|
142
|
+
print(rs)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# tidb 异步测试,async_enable=True
|
|
146
|
+
async def async_tidb_test():
|
|
147
|
+
async with options.tidb.acquire() as conn:
|
|
148
|
+
async with conn.cursor() as cursor:
|
|
149
|
+
await cursor.execute("select 1")
|
|
150
|
+
rs = await cursor.fetchone()
|
|
151
|
+
print(rs)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
loop = asyncio.get_event_loop()
|
|
155
|
+
loop.run_until_complete(async_tidb_test())
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
# sqlite3 异步测试
|
|
159
|
+
async def async_sqlite3_test():
|
|
160
|
+
cur = await options.sqlite3.cursor()
|
|
161
|
+
await cur.execute("SELECT 1")
|
|
162
|
+
row = await cur.fetchone()
|
|
163
|
+
print(row)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
loop = asyncio.get_event_loop()
|
|
167
|
+
loop.run_until_complete(async_sqlite3_test())
|
|
168
|
+
|
|
169
|
+
# sqlite3 同步测试
|
|
170
|
+
cursor = options.sqlite3.cursor()
|
|
171
|
+
cursor.execute('select 1')
|
|
172
|
+
row = cursor.fetchone()
|
|
173
|
+
print(row)
|
|
174
|
+
|
|
77
175
|
# es同步测试,async_enable=False
|
|
78
176
|
body = {
|
|
79
177
|
"query": {
|
|
@@ -103,6 +201,23 @@ async def async_es_test():
|
|
|
103
201
|
loop = asyncio.get_event_loop()
|
|
104
202
|
loop.run_until_complete(async_es_test())
|
|
105
203
|
|
|
204
|
+
# sql server同步测试
|
|
205
|
+
cursor = options.mssql.cursor()
|
|
206
|
+
cursor.execute('SELECT 1')
|
|
207
|
+
row = cursor.fetchone()
|
|
208
|
+
print(row)
|
|
209
|
+
|
|
210
|
+
# sql server暂不支持异步测试
|
|
211
|
+
|
|
212
|
+
# oracle 同步测试
|
|
213
|
+
cursor = options.oracle.cursor()
|
|
214
|
+
cursor.execute('select 1')
|
|
215
|
+
row = cursor.fetchone()
|
|
216
|
+
print(row)
|
|
217
|
+
|
|
218
|
+
# oracle暂不支持异步测试
|
|
219
|
+
|
|
220
|
+
|
|
106
221
|
# mongo同步测试,async_enable=False
|
|
107
222
|
print(options.mongo.test.test.find_one())
|
|
108
223
|
|
|
@@ -159,7 +274,7 @@ loop.run_until_complete(async_redis_test())
|
|
|
159
274
|
|
|
160
275
|
# sqlalchemy table
|
|
161
276
|
meta = MetaData()
|
|
162
|
-
t1 = Table("
|
|
277
|
+
t1 = Table("test_user", meta, Column("name", VARCHAR(collation='utf8mb3_bin', length=255)),
|
|
163
278
|
Column(name='id', comment=None, nullable=False, autoincrement=False, primary_key=True, type_=INTEGER(),
|
|
164
279
|
server_default=None))
|
|
165
280
|
|
|
@@ -183,25 +298,25 @@ loop.run_until_complete(async_sqlalchemy_test())
|
|
|
183
298
|
|
|
184
299
|
# neo4j同步测试
|
|
185
300
|
def query(tx):
|
|
186
|
-
nql = "MATCH (
|
|
301
|
+
nql = "MATCH (c:Company) return c limit 1"
|
|
187
302
|
for record in tx.run(nql):
|
|
188
303
|
print(record)
|
|
189
304
|
|
|
190
305
|
|
|
191
|
-
with options.neo4j.session(database="
|
|
306
|
+
with options.neo4j.session(database="invest") as session:
|
|
192
307
|
session.execute_read(query)
|
|
193
308
|
|
|
194
309
|
|
|
195
310
|
# neo4j异步测试
|
|
196
311
|
async def query(tx):
|
|
197
|
-
nql = "MATCH (
|
|
312
|
+
nql = "MATCH (c:Company) return c limit 1"
|
|
198
313
|
res = await tx.run(nql)
|
|
199
314
|
async for record in res:
|
|
200
315
|
print(record)
|
|
201
316
|
|
|
202
317
|
|
|
203
318
|
async def async_neo4j_test():
|
|
204
|
-
async with options.neo4j.session(database="
|
|
319
|
+
async with options.neo4j.session(database="invest") as session:
|
|
205
320
|
await session.execute_read(query)
|
|
206
321
|
|
|
207
322
|
|
|
@@ -227,4 +342,5 @@ async def async_clickhouse_test():
|
|
|
227
342
|
loop = asyncio.get_event_loop()
|
|
228
343
|
loop.run_until_complete(async_clickhouse_test())
|
|
229
344
|
|
|
345
|
+
|
|
230
346
|
```
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
```python
|
|
8
8
|
import asyncio
|
|
9
9
|
|
|
10
|
-
from sqlalchemy import
|
|
10
|
+
from sqlalchemy import select, Column, VARCHAR, INTEGER, Table, MetaData
|
|
11
11
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
|
12
12
|
from sqlalchemy.orm import sessionmaker
|
|
13
13
|
|
|
@@ -16,28 +16,42 @@ from lesscode_database.options import options
|
|
|
16
16
|
|
|
17
17
|
options.conn_list = [
|
|
18
18
|
ConnectionInfo(dialect="mysql", name="mysql", host="127.0.0.1", port=3306, user="root",
|
|
19
|
-
password="root", db_name="test", enable=
|
|
19
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
20
20
|
async_enable=True),
|
|
21
|
+
ConnectionInfo(dialect="doris", name="doris", host="127.0.0.1", port=9030, user="root",
|
|
22
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
23
|
+
async_enable=True),
|
|
24
|
+
ConnectionInfo(dialect="ocean_base", name="ocean_base", host="127.0.0.1", port=2883, user="root",
|
|
25
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
26
|
+
async_enable=True),
|
|
27
|
+
ConnectionInfo(dialect="tidb", name="tidb", host="127.0.0.1", port=4000, user="root",
|
|
28
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
29
|
+
async_enable=True),
|
|
30
|
+
ConnectionInfo(dialect="mssql", name="mssql", host="127.0.0.1", port=1433, user="root",
|
|
31
|
+
password="root", db_name="test", enable=False, async_enable=False),
|
|
32
|
+
ConnectionInfo(dialect="oracle", name="oracle", host="127.0.0.1", port=1521, user="root",
|
|
33
|
+
password="root", db_name="test", enable=False, async_enable=False),
|
|
34
|
+
ConnectionInfo(dialect="sqlite3", name="sqlite3", dsn="/test/test.db", async_enable=False),
|
|
21
35
|
ConnectionInfo(dialect="elasticsearch", name="es", host="127.0.0.1", port=9210, user="root",
|
|
22
|
-
password="root", enable=
|
|
36
|
+
password="root", enable=False, async_enable=True),
|
|
23
37
|
ConnectionInfo(dialect="mongo", name="mongo", host="127.0.0.1", port=27027, user="root",
|
|
24
|
-
password="root", enable=
|
|
38
|
+
password="root", enable=False, async_enable=True),
|
|
25
39
|
ConnectionInfo(dialect="nebula", name="nebula", host="127.0.0.1", port=9669, user="root",
|
|
26
|
-
password="nebula", db_name="nebula", enable=
|
|
40
|
+
password="nebula", db_name="nebula", enable=False),
|
|
27
41
|
ConnectionInfo(dialect="postgresql", host="127.0.0.1", port=5454, user="root", password="root",
|
|
28
|
-
db_name="root", enable=
|
|
42
|
+
db_name="root", enable=False, async_enable=True),
|
|
29
43
|
ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
|
|
30
|
-
password=None, db_name=1, enable=
|
|
44
|
+
password=None, db_name=1, enable=False, async_enable=True),
|
|
45
|
+
# sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
|
|
46
|
+
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
|
|
31
47
|
ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
|
|
32
|
-
password="root", db_name="test", enable=
|
|
48
|
+
password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
|
|
33
49
|
ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
|
|
34
|
-
password="neo4j", db_name=None, enable=
|
|
50
|
+
password="neo4j", db_name=None, enable=False, async_enable=True),
|
|
35
51
|
ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
|
|
36
52
|
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
37
53
|
|
|
38
54
|
]
|
|
39
|
-
# 获取数据库连接池的方式
|
|
40
|
-
## options.name name是ConnectionInfo的name,options.conn_list里所有的name不可重复
|
|
41
55
|
|
|
42
56
|
# mysql 同步测试,async_enable=False
|
|
43
57
|
with options.mysql.dedicated_connection() as conn:
|
|
@@ -61,6 +75,90 @@ async def async_mysql_test():
|
|
|
61
75
|
loop = asyncio.get_event_loop()
|
|
62
76
|
loop.run_until_complete(async_mysql_test())
|
|
63
77
|
|
|
78
|
+
# doris 同步测试,async_enable=False
|
|
79
|
+
with options.doris.dedicated_connection() as conn:
|
|
80
|
+
conn.ping(reconnect=True)
|
|
81
|
+
with conn.cursor() as cursor:
|
|
82
|
+
cursor.execute("select 1")
|
|
83
|
+
description = cursor.description
|
|
84
|
+
rs = cursor.fetchone()
|
|
85
|
+
print(rs)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# doris 异步测试,async_enable=True
|
|
89
|
+
async def async_doris_test():
|
|
90
|
+
async with options.doris.acquire() as conn:
|
|
91
|
+
async with conn.cursor() as cursor:
|
|
92
|
+
await cursor.execute("select 1")
|
|
93
|
+
rs = await cursor.fetchone()
|
|
94
|
+
print(rs)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
loop = asyncio.get_event_loop()
|
|
98
|
+
loop.run_until_complete(async_doris_test())
|
|
99
|
+
|
|
100
|
+
# ocean_base 同步测试,async_enable=False
|
|
101
|
+
with options.ocean_base.dedicated_connection() as conn:
|
|
102
|
+
conn.ping(reconnect=True)
|
|
103
|
+
with conn.cursor() as cursor:
|
|
104
|
+
cursor.execute("select 1")
|
|
105
|
+
description = cursor.description
|
|
106
|
+
rs = cursor.fetchone()
|
|
107
|
+
print(rs)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
# ocean_base 异步测试,async_enable=True
|
|
111
|
+
async def async_ocean_base_test():
|
|
112
|
+
async with options.ocean_base.acquire() as conn:
|
|
113
|
+
async with conn.cursor() as cursor:
|
|
114
|
+
await cursor.execute("select 1")
|
|
115
|
+
rs = await cursor.fetchone()
|
|
116
|
+
print(rs)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
loop = asyncio.get_event_loop()
|
|
120
|
+
loop.run_until_complete(async_ocean_base_test())
|
|
121
|
+
|
|
122
|
+
# tidb 同步测试,async_enable=False
|
|
123
|
+
with options.tidb.dedicated_connection() as conn:
|
|
124
|
+
conn.ping(reconnect=True)
|
|
125
|
+
with conn.cursor() as cursor:
|
|
126
|
+
cursor.execute("select 1")
|
|
127
|
+
description = cursor.description
|
|
128
|
+
rs = cursor.fetchone()
|
|
129
|
+
print(rs)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
# tidb 异步测试,async_enable=True
|
|
133
|
+
async def async_tidb_test():
|
|
134
|
+
async with options.tidb.acquire() as conn:
|
|
135
|
+
async with conn.cursor() as cursor:
|
|
136
|
+
await cursor.execute("select 1")
|
|
137
|
+
rs = await cursor.fetchone()
|
|
138
|
+
print(rs)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
loop = asyncio.get_event_loop()
|
|
142
|
+
loop.run_until_complete(async_tidb_test())
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# sqlite3 异步测试
|
|
146
|
+
async def async_sqlite3_test():
|
|
147
|
+
cur = await options.sqlite3.cursor()
|
|
148
|
+
await cur.execute("SELECT 1")
|
|
149
|
+
row = await cur.fetchone()
|
|
150
|
+
print(row)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
loop = asyncio.get_event_loop()
|
|
154
|
+
loop.run_until_complete(async_sqlite3_test())
|
|
155
|
+
|
|
156
|
+
# sqlite3 同步测试
|
|
157
|
+
cursor = options.sqlite3.cursor()
|
|
158
|
+
cursor.execute('select 1')
|
|
159
|
+
row = cursor.fetchone()
|
|
160
|
+
print(row)
|
|
161
|
+
|
|
64
162
|
# es同步测试,async_enable=False
|
|
65
163
|
body = {
|
|
66
164
|
"query": {
|
|
@@ -90,6 +188,23 @@ async def async_es_test():
|
|
|
90
188
|
loop = asyncio.get_event_loop()
|
|
91
189
|
loop.run_until_complete(async_es_test())
|
|
92
190
|
|
|
191
|
+
# sql server同步测试
|
|
192
|
+
cursor = options.mssql.cursor()
|
|
193
|
+
cursor.execute('SELECT 1')
|
|
194
|
+
row = cursor.fetchone()
|
|
195
|
+
print(row)
|
|
196
|
+
|
|
197
|
+
# sql server暂不支持异步测试
|
|
198
|
+
|
|
199
|
+
# oracle 同步测试
|
|
200
|
+
cursor = options.oracle.cursor()
|
|
201
|
+
cursor.execute('select 1')
|
|
202
|
+
row = cursor.fetchone()
|
|
203
|
+
print(row)
|
|
204
|
+
|
|
205
|
+
# oracle暂不支持异步测试
|
|
206
|
+
|
|
207
|
+
|
|
93
208
|
# mongo同步测试,async_enable=False
|
|
94
209
|
print(options.mongo.test.test.find_one())
|
|
95
210
|
|
|
@@ -146,7 +261,7 @@ loop.run_until_complete(async_redis_test())
|
|
|
146
261
|
|
|
147
262
|
# sqlalchemy table
|
|
148
263
|
meta = MetaData()
|
|
149
|
-
t1 = Table("
|
|
264
|
+
t1 = Table("test_user", meta, Column("name", VARCHAR(collation='utf8mb3_bin', length=255)),
|
|
150
265
|
Column(name='id', comment=None, nullable=False, autoincrement=False, primary_key=True, type_=INTEGER(),
|
|
151
266
|
server_default=None))
|
|
152
267
|
|
|
@@ -170,25 +285,25 @@ loop.run_until_complete(async_sqlalchemy_test())
|
|
|
170
285
|
|
|
171
286
|
# neo4j同步测试
|
|
172
287
|
def query(tx):
|
|
173
|
-
nql = "MATCH (
|
|
288
|
+
nql = "MATCH (c:Company) return c limit 1"
|
|
174
289
|
for record in tx.run(nql):
|
|
175
290
|
print(record)
|
|
176
291
|
|
|
177
292
|
|
|
178
|
-
with options.neo4j.session(database="
|
|
293
|
+
with options.neo4j.session(database="invest") as session:
|
|
179
294
|
session.execute_read(query)
|
|
180
295
|
|
|
181
296
|
|
|
182
297
|
# neo4j异步测试
|
|
183
298
|
async def query(tx):
|
|
184
|
-
nql = "MATCH (
|
|
299
|
+
nql = "MATCH (c:Company) return c limit 1"
|
|
185
300
|
res = await tx.run(nql)
|
|
186
301
|
async for record in res:
|
|
187
302
|
print(record)
|
|
188
303
|
|
|
189
304
|
|
|
190
305
|
async def async_neo4j_test():
|
|
191
|
-
async with options.neo4j.session(database="
|
|
306
|
+
async with options.neo4j.session(database="invest") as session:
|
|
192
307
|
await session.execute_read(query)
|
|
193
308
|
|
|
194
309
|
|
|
@@ -214,4 +329,5 @@ async def async_clickhouse_test():
|
|
|
214
329
|
loop = asyncio.get_event_loop()
|
|
215
330
|
loop.run_until_complete(async_clickhouse_test())
|
|
216
331
|
|
|
332
|
+
|
|
217
333
|
```
|
|
@@ -124,7 +124,7 @@ class Pool:
|
|
|
124
124
|
try:
|
|
125
125
|
aiomysql = importlib.import_module("aiomysql")
|
|
126
126
|
except ImportError:
|
|
127
|
-
raise Exception(f"
|
|
127
|
+
raise Exception(f"aiomysql is not exist,run:pip install aiomysql")
|
|
128
128
|
pool = await aiomysql.create_pool(host=conn_info.host, port=conn_info.port,
|
|
129
129
|
user=conn_info.user,
|
|
130
130
|
password=conn_info.password,
|
|
@@ -159,6 +159,227 @@ class Pool:
|
|
|
159
159
|
read_timeout=30)
|
|
160
160
|
return pool
|
|
161
161
|
|
|
162
|
+
@staticmethod
|
|
163
|
+
async def create_sqlite3_pool(conn_info: ConnectionInfo):
|
|
164
|
+
"""
|
|
165
|
+
创建mysql 异步连接池
|
|
166
|
+
:param conn_info: 连接信息
|
|
167
|
+
:return:
|
|
168
|
+
"""
|
|
169
|
+
try:
|
|
170
|
+
aiosqlite3 = importlib.import_module("aiosqlite3")
|
|
171
|
+
except ImportError:
|
|
172
|
+
raise Exception(f"aiosqlite3 is not exist,run:pip install aiosqlite3")
|
|
173
|
+
pool = await aiosqlite3.connect(database=conn_info.dsn)
|
|
174
|
+
return pool
|
|
175
|
+
|
|
176
|
+
@staticmethod
|
|
177
|
+
def sync_create_sqlite3_pool(conn_info: ConnectionInfo):
|
|
178
|
+
"""
|
|
179
|
+
创建mysql 同步连接池
|
|
180
|
+
:param conn_info: 连接信息
|
|
181
|
+
:return:
|
|
182
|
+
"""
|
|
183
|
+
try:
|
|
184
|
+
sqlite3 = importlib.import_module("sqlite3")
|
|
185
|
+
except ImportError:
|
|
186
|
+
raise Exception(f"sqlite3 is not exist,run:pip install sqlite3")
|
|
187
|
+
try:
|
|
188
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
189
|
+
except ImportError:
|
|
190
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils")
|
|
191
|
+
pool = pooled_db.PooledDB(creator=sqlite3, host=conn_info.host, port=conn_info.port,
|
|
192
|
+
user=conn_info.user,
|
|
193
|
+
passwd=conn_info.password, db=conn_info.db_name,
|
|
194
|
+
mincached=conn_info.min_size, blocking=True, maxusage=conn_info.min_size,
|
|
195
|
+
maxshared=conn_info.max_size, maxcached=conn_info.max_size,
|
|
196
|
+
ping=1, maxconnections=conn_info.max_size, charset="utf8mb4", autocommit=True,
|
|
197
|
+
read_timeout=30)
|
|
198
|
+
return pool
|
|
199
|
+
|
|
200
|
+
@staticmethod
|
|
201
|
+
def sync_create_mssql_pool(conn_info: ConnectionInfo):
|
|
202
|
+
"""
|
|
203
|
+
创建mysql 同步连接池
|
|
204
|
+
:param conn_info: 连接信息
|
|
205
|
+
:return:
|
|
206
|
+
"""
|
|
207
|
+
try:
|
|
208
|
+
pymssql = importlib.import_module("pymssql")
|
|
209
|
+
except ImportError:
|
|
210
|
+
raise Exception(f"pymssql is not exist,run:pip install pymssql")
|
|
211
|
+
try:
|
|
212
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
213
|
+
except ImportError:
|
|
214
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils")
|
|
215
|
+
pool = pooled_db.PooledDB(creator=pymssql, host=conn_info.host, port=conn_info.port,
|
|
216
|
+
user=conn_info.user,
|
|
217
|
+
passwd=conn_info.password, db=conn_info.db_name,
|
|
218
|
+
mincached=conn_info.min_size, blocking=True, maxusage=conn_info.min_size,
|
|
219
|
+
maxshared=conn_info.max_size, maxcached=conn_info.max_size,
|
|
220
|
+
ping=1, maxconnections=conn_info.max_size, charset="utf8mb4", autocommit=True,
|
|
221
|
+
read_timeout=30)
|
|
222
|
+
return pool
|
|
223
|
+
|
|
224
|
+
@staticmethod
|
|
225
|
+
def sync_create_oracle_pool(conn_info: ConnectionInfo):
|
|
226
|
+
"""
|
|
227
|
+
创建mysql 同步连接池
|
|
228
|
+
:param conn_info: 连接信息
|
|
229
|
+
:return:
|
|
230
|
+
"""
|
|
231
|
+
try:
|
|
232
|
+
cx_oracle = importlib.import_module("cx_Oracle")
|
|
233
|
+
except ImportError:
|
|
234
|
+
raise Exception(f"cx_Oracle is not exist,run:pip install cx_Oracle")
|
|
235
|
+
try:
|
|
236
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
237
|
+
except ImportError:
|
|
238
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils")
|
|
239
|
+
pool = pooled_db.PooledDB(creator=cx_oracle, host=conn_info.host, port=conn_info.port,
|
|
240
|
+
user=conn_info.user,
|
|
241
|
+
passwd=conn_info.password, db=conn_info.db_name,
|
|
242
|
+
mincached=conn_info.min_size, blocking=True, maxusage=conn_info.min_size,
|
|
243
|
+
maxshared=conn_info.max_size, maxcached=conn_info.max_size,
|
|
244
|
+
ping=1, maxconnections=conn_info.max_size, charset="utf8mb4", autocommit=True,
|
|
245
|
+
read_timeout=30)
|
|
246
|
+
return pool
|
|
247
|
+
|
|
248
|
+
@staticmethod
|
|
249
|
+
async def create_doris_pool(conn_info: ConnectionInfo):
|
|
250
|
+
"""
|
|
251
|
+
创建doris 异步连接池
|
|
252
|
+
:param conn_info: 连接信息
|
|
253
|
+
:return:
|
|
254
|
+
"""
|
|
255
|
+
try:
|
|
256
|
+
aiomysql = importlib.import_module("aiomysql")
|
|
257
|
+
except ImportError:
|
|
258
|
+
raise Exception(f"aiomysql is not exist,run:pip install aiomysql")
|
|
259
|
+
pool = await aiomysql.create_pool(host=conn_info.host, port=conn_info.port,
|
|
260
|
+
user=conn_info.user,
|
|
261
|
+
password=conn_info.password,
|
|
262
|
+
pool_recycle=conn_info.params.get("pool_recycle", 3600)
|
|
263
|
+
if conn_info.params else 3600,
|
|
264
|
+
db=conn_info.db_name, autocommit=True,
|
|
265
|
+
minsize=conn_info.min_size,
|
|
266
|
+
maxsize=conn_info.max_size)
|
|
267
|
+
return pool
|
|
268
|
+
|
|
269
|
+
@staticmethod
|
|
270
|
+
def sync_create_doris_pool(conn_info: ConnectionInfo):
|
|
271
|
+
"""
|
|
272
|
+
创建doris 同步连接池
|
|
273
|
+
:param conn_info: 连接信息
|
|
274
|
+
:return:
|
|
275
|
+
"""
|
|
276
|
+
try:
|
|
277
|
+
pymysql = importlib.import_module("pymysql")
|
|
278
|
+
except ImportError:
|
|
279
|
+
raise Exception(f"pymysql is not exist,run:pip install pymysql")
|
|
280
|
+
try:
|
|
281
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
282
|
+
except ImportError:
|
|
283
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils")
|
|
284
|
+
pool = pooled_db.PooledDB(creator=pymysql, host=conn_info.host, port=conn_info.port,
|
|
285
|
+
user=conn_info.user,
|
|
286
|
+
passwd=conn_info.password, db=conn_info.db_name,
|
|
287
|
+
mincached=conn_info.min_size, blocking=True, maxusage=conn_info.min_size,
|
|
288
|
+
maxshared=conn_info.max_size, maxcached=conn_info.max_size,
|
|
289
|
+
ping=1, maxconnections=conn_info.max_size, charset="utf8mb4", autocommit=True,
|
|
290
|
+
read_timeout=30)
|
|
291
|
+
return pool
|
|
292
|
+
|
|
293
|
+
@staticmethod
|
|
294
|
+
async def create_tidb_pool(conn_info: ConnectionInfo):
|
|
295
|
+
"""
|
|
296
|
+
创建tidb 异步连接池
|
|
297
|
+
:param conn_info: 连接信息
|
|
298
|
+
:return:
|
|
299
|
+
"""
|
|
300
|
+
try:
|
|
301
|
+
aiomysql = importlib.import_module("aiomysql")
|
|
302
|
+
except ImportError:
|
|
303
|
+
raise Exception(f"aiomysql is not exist,run:pip install aiomysql")
|
|
304
|
+
pool = await aiomysql.create_pool(host=conn_info.host, port=conn_info.port,
|
|
305
|
+
user=conn_info.user,
|
|
306
|
+
password=conn_info.password,
|
|
307
|
+
pool_recycle=conn_info.params.get("pool_recycle", 3600)
|
|
308
|
+
if conn_info.params else 3600,
|
|
309
|
+
db=conn_info.db_name, autocommit=True,
|
|
310
|
+
minsize=conn_info.min_size,
|
|
311
|
+
maxsize=conn_info.max_size)
|
|
312
|
+
return pool
|
|
313
|
+
|
|
314
|
+
@staticmethod
|
|
315
|
+
def sync_create_tidb_pool(conn_info: ConnectionInfo):
|
|
316
|
+
"""
|
|
317
|
+
创建tidb 同步连接池
|
|
318
|
+
:param conn_info: 连接信息
|
|
319
|
+
:return:
|
|
320
|
+
"""
|
|
321
|
+
try:
|
|
322
|
+
pymysql = importlib.import_module("pymysql")
|
|
323
|
+
except ImportError:
|
|
324
|
+
raise Exception(f"pymysql is not exist,run:pip install pymysql")
|
|
325
|
+
try:
|
|
326
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
327
|
+
except ImportError:
|
|
328
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils")
|
|
329
|
+
pool = pooled_db.PooledDB(creator=pymysql, host=conn_info.host, port=conn_info.port,
|
|
330
|
+
user=conn_info.user,
|
|
331
|
+
passwd=conn_info.password, db=conn_info.db_name,
|
|
332
|
+
mincached=conn_info.min_size, blocking=True, maxusage=conn_info.min_size,
|
|
333
|
+
maxshared=conn_info.max_size, maxcached=conn_info.max_size,
|
|
334
|
+
ping=1, maxconnections=conn_info.max_size, charset="utf8mb4", autocommit=True,
|
|
335
|
+
read_timeout=30)
|
|
336
|
+
return pool
|
|
337
|
+
|
|
338
|
+
@staticmethod
|
|
339
|
+
async def create_ocean_base_pool(conn_info: ConnectionInfo):
|
|
340
|
+
"""
|
|
341
|
+
创建ocean_base 异步连接池
|
|
342
|
+
:param conn_info: 连接信息
|
|
343
|
+
:return:
|
|
344
|
+
"""
|
|
345
|
+
try:
|
|
346
|
+
aiomysql = importlib.import_module("aiomysql")
|
|
347
|
+
except ImportError:
|
|
348
|
+
raise Exception(f"aiomysql is not exist,run:pip install aiomysql")
|
|
349
|
+
pool = await aiomysql.create_pool(host=conn_info.host, port=conn_info.port,
|
|
350
|
+
user=conn_info.user,
|
|
351
|
+
password=conn_info.password,
|
|
352
|
+
pool_recycle=conn_info.params.get("pool_recycle", 3600)
|
|
353
|
+
if conn_info.params else 3600,
|
|
354
|
+
db=conn_info.db_name, autocommit=True,
|
|
355
|
+
minsize=conn_info.min_size,
|
|
356
|
+
maxsize=conn_info.max_size)
|
|
357
|
+
return pool
|
|
358
|
+
|
|
359
|
+
@staticmethod
|
|
360
|
+
def sync_create_ocean_base_pool(conn_info: ConnectionInfo):
|
|
361
|
+
"""
|
|
362
|
+
创建ocean_base 同步连接池
|
|
363
|
+
:param conn_info: 连接信息
|
|
364
|
+
:return:
|
|
365
|
+
"""
|
|
366
|
+
try:
|
|
367
|
+
pymysql = importlib.import_module("pymysql")
|
|
368
|
+
except ImportError:
|
|
369
|
+
raise Exception(f"pymysql is not exist,run:pip install pymysql")
|
|
370
|
+
try:
|
|
371
|
+
pooled_db = importlib.import_module("dbutils.pooled_db")
|
|
372
|
+
except ImportError:
|
|
373
|
+
raise Exception(f"DBUtils is not exist,run:pip install DBUtils")
|
|
374
|
+
pool = pooled_db.PooledDB(creator=pymysql, host=conn_info.host, port=conn_info.port,
|
|
375
|
+
user=conn_info.user,
|
|
376
|
+
passwd=conn_info.password, db=conn_info.db_name,
|
|
377
|
+
mincached=conn_info.min_size, blocking=True, maxusage=conn_info.min_size,
|
|
378
|
+
maxshared=conn_info.max_size, maxcached=conn_info.max_size,
|
|
379
|
+
ping=1, maxconnections=conn_info.max_size, charset="utf8mb4", autocommit=True,
|
|
380
|
+
read_timeout=30)
|
|
381
|
+
return pool
|
|
382
|
+
|
|
162
383
|
@staticmethod
|
|
163
384
|
def sync_create_nebula_pool(conn_info: ConnectionInfo):
|
|
164
385
|
"""
|
|
@@ -427,6 +648,10 @@ class Pool:
|
|
|
427
648
|
url = 'mysql+aiomysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(
|
|
428
649
|
conn_info.user, conn_info.password, conn_info.host, conn_info.port,
|
|
429
650
|
conn_info.db_name)
|
|
651
|
+
elif db_type == "doris":
|
|
652
|
+
url = 'mysql+aiomysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(
|
|
653
|
+
conn_info.user, conn_info.password, conn_info.host, conn_info.port,
|
|
654
|
+
conn_info.db_name)
|
|
430
655
|
else:
|
|
431
656
|
raise Exception("UNSUPPORTED DB TYPE")
|
|
432
657
|
try:
|
|
@@ -476,6 +701,20 @@ class Pool:
|
|
|
476
701
|
url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(
|
|
477
702
|
conn_info.user, conn_info.password, conn_info.host, conn_info.port,
|
|
478
703
|
conn_info.db_name)
|
|
704
|
+
elif db_type == "doris":
|
|
705
|
+
url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(
|
|
706
|
+
conn_info.user, conn_info.password, conn_info.host, conn_info.port,
|
|
707
|
+
conn_info.db_name)
|
|
708
|
+
elif db_type == "sqlite3":
|
|
709
|
+
url = conn_info.dsn
|
|
710
|
+
elif db_type == "mssql":
|
|
711
|
+
url = "mssql+pymssql://{}:{}@{}:{}/{}?charset=utf8mb4".format(
|
|
712
|
+
conn_info.user, conn_info.password, conn_info.host, conn_info.port,
|
|
713
|
+
conn_info.db_name)
|
|
714
|
+
elif db_type == "oracle":
|
|
715
|
+
url = "oracle+cx_oracle://{}:{}@{}:{}/{}?charset=utf8mb4".format(
|
|
716
|
+
conn_info.user, conn_info.password, conn_info.host, conn_info.port,
|
|
717
|
+
conn_info.db_name)
|
|
479
718
|
else:
|
|
480
719
|
raise Exception("UNSUPPORTED DB TYPE")
|
|
481
720
|
try:
|
|
@@ -525,6 +764,30 @@ def get_pool(conn_info: ConnectionInfo):
|
|
|
525
764
|
else:
|
|
526
765
|
return run_sync(Pool.sync_create_mysql_pool(conn_info))
|
|
527
766
|
|
|
767
|
+
elif conn_info.dialect == "doris":
|
|
768
|
+
if conn_info.async_enable:
|
|
769
|
+
return run_sync(Pool.create_doris_pool(conn_info))
|
|
770
|
+
else:
|
|
771
|
+
return run_sync(Pool.sync_create_doris_pool(conn_info))
|
|
772
|
+
|
|
773
|
+
elif conn_info.dialect == "ocean_base":
|
|
774
|
+
if conn_info.async_enable:
|
|
775
|
+
return run_sync(Pool.create_ocean_base_pool(conn_info))
|
|
776
|
+
else:
|
|
777
|
+
return run_sync(Pool.sync_create_ocean_base_pool(conn_info))
|
|
778
|
+
|
|
779
|
+
elif conn_info.dialect == "tidb":
|
|
780
|
+
if conn_info.async_enable:
|
|
781
|
+
return run_sync(Pool.create_tidb_pool(conn_info))
|
|
782
|
+
else:
|
|
783
|
+
return run_sync(Pool.sync_create_tidb_pool(conn_info))
|
|
784
|
+
|
|
785
|
+
elif conn_info.dialect == "mssql":
|
|
786
|
+
return run_sync(Pool.sync_create_mssql_pool(conn_info))
|
|
787
|
+
|
|
788
|
+
elif conn_info.dialect == "oracle":
|
|
789
|
+
return run_sync(Pool.sync_create_oracle_pool(conn_info))
|
|
790
|
+
|
|
528
791
|
elif conn_info.dialect == "nebula":
|
|
529
792
|
return run_sync(Pool.sync_create_nebula_pool(conn_info))
|
|
530
793
|
|
|
@@ -540,6 +803,12 @@ def get_pool(conn_info: ConnectionInfo):
|
|
|
540
803
|
else:
|
|
541
804
|
return run_sync(Pool.sync_create_postgresql_pool(conn_info))
|
|
542
805
|
|
|
806
|
+
elif conn_info.dialect == "sqlite3":
|
|
807
|
+
if conn_info.async_enable:
|
|
808
|
+
return run_sync(Pool.create_sqlite3_pool(conn_info))
|
|
809
|
+
else:
|
|
810
|
+
return run_sync(Pool.sync_create_sqlite3_pool(conn_info))
|
|
811
|
+
|
|
543
812
|
elif conn_info.dialect == "redis":
|
|
544
813
|
if conn_info.async_enable:
|
|
545
814
|
return run_sync(Pool.create_redis_pool(conn_info))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.4"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lesscode-database
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.4
|
|
4
4
|
Summary: lesscode_database是数据库连接工具包
|
|
5
5
|
Author: navysummer
|
|
6
6
|
Author-email: navysummer@yeah.net
|
|
@@ -20,7 +20,7 @@ License-File: LICENSE
|
|
|
20
20
|
```python
|
|
21
21
|
import asyncio
|
|
22
22
|
|
|
23
|
-
from sqlalchemy import
|
|
23
|
+
from sqlalchemy import select, Column, VARCHAR, INTEGER, Table, MetaData
|
|
24
24
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
|
25
25
|
from sqlalchemy.orm import sessionmaker
|
|
26
26
|
|
|
@@ -29,28 +29,42 @@ from lesscode_database.options import options
|
|
|
29
29
|
|
|
30
30
|
options.conn_list = [
|
|
31
31
|
ConnectionInfo(dialect="mysql", name="mysql", host="127.0.0.1", port=3306, user="root",
|
|
32
|
-
password="root", db_name="test", enable=
|
|
32
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
33
33
|
async_enable=True),
|
|
34
|
+
ConnectionInfo(dialect="doris", name="doris", host="127.0.0.1", port=9030, user="root",
|
|
35
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
36
|
+
async_enable=True),
|
|
37
|
+
ConnectionInfo(dialect="ocean_base", name="ocean_base", host="127.0.0.1", port=2883, user="root",
|
|
38
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
39
|
+
async_enable=True),
|
|
40
|
+
ConnectionInfo(dialect="tidb", name="tidb", host="127.0.0.1", port=4000, user="root",
|
|
41
|
+
password="root", db_name="test", enable=False, params={"pool_recycle": 3600},
|
|
42
|
+
async_enable=True),
|
|
43
|
+
ConnectionInfo(dialect="mssql", name="mssql", host="127.0.0.1", port=1433, user="root",
|
|
44
|
+
password="root", db_name="test", enable=False, async_enable=False),
|
|
45
|
+
ConnectionInfo(dialect="oracle", name="oracle", host="127.0.0.1", port=1521, user="root",
|
|
46
|
+
password="root", db_name="test", enable=False, async_enable=False),
|
|
47
|
+
ConnectionInfo(dialect="sqlite3", name="sqlite3", dsn="/test/test.db", async_enable=False),
|
|
34
48
|
ConnectionInfo(dialect="elasticsearch", name="es", host="127.0.0.1", port=9210, user="root",
|
|
35
|
-
password="root", enable=
|
|
49
|
+
password="root", enable=False, async_enable=True),
|
|
36
50
|
ConnectionInfo(dialect="mongo", name="mongo", host="127.0.0.1", port=27027, user="root",
|
|
37
|
-
password="root", enable=
|
|
51
|
+
password="root", enable=False, async_enable=True),
|
|
38
52
|
ConnectionInfo(dialect="nebula", name="nebula", host="127.0.0.1", port=9669, user="root",
|
|
39
|
-
password="nebula", db_name="nebula", enable=
|
|
53
|
+
password="nebula", db_name="nebula", enable=False),
|
|
40
54
|
ConnectionInfo(dialect="postgresql", host="127.0.0.1", port=5454, user="root", password="root",
|
|
41
|
-
db_name="root", enable=
|
|
55
|
+
db_name="root", enable=False, async_enable=True),
|
|
42
56
|
ConnectionInfo(dialect="redis", name="redis", host="127.0.0.1", port=6379, user=None,
|
|
43
|
-
password=None, db_name=1, enable=
|
|
57
|
+
password=None, db_name=1, enable=False, async_enable=True),
|
|
58
|
+
# sqlalchemy 异步支持mysql,postgresql,tidb,ocean_base,doris;
|
|
59
|
+
# 同步支持mysql,postgresql,tidb,ocean_base,doris,sqlite3,mssql,oracle
|
|
44
60
|
ConnectionInfo(dialect="sqlalchemy", name="sqlalchemy", host="127.0.0.1", port=3306, user="root",
|
|
45
|
-
password="root", db_name="test", enable=
|
|
61
|
+
password="root", db_name="test", enable=False, async_enable=False, params={"db_type": "mysql"}),
|
|
46
62
|
ConnectionInfo(dialect="neo4j", name="neo4j", host="127.0.0.1", port=7687, user="neo4j",
|
|
47
|
-
password="neo4j", db_name=None, enable=
|
|
63
|
+
password="neo4j", db_name=None, enable=False, async_enable=True),
|
|
48
64
|
ConnectionInfo(dialect="clickhouse", name="clickhouse", dsn="clickhouse://localhost", host="127.0.0.1", port=9000,
|
|
49
65
|
user="default", password="", db_name='', enable=True, async_enable=False),
|
|
50
66
|
|
|
51
67
|
]
|
|
52
|
-
# 获取数据库连接池的方式
|
|
53
|
-
## options.name name是ConnectionInfo的name,options.conn_list里所有的name不可重复
|
|
54
68
|
|
|
55
69
|
# mysql 同步测试,async_enable=False
|
|
56
70
|
with options.mysql.dedicated_connection() as conn:
|
|
@@ -74,6 +88,90 @@ async def async_mysql_test():
|
|
|
74
88
|
loop = asyncio.get_event_loop()
|
|
75
89
|
loop.run_until_complete(async_mysql_test())
|
|
76
90
|
|
|
91
|
+
# doris 同步测试,async_enable=False
|
|
92
|
+
with options.doris.dedicated_connection() as conn:
|
|
93
|
+
conn.ping(reconnect=True)
|
|
94
|
+
with conn.cursor() as cursor:
|
|
95
|
+
cursor.execute("select 1")
|
|
96
|
+
description = cursor.description
|
|
97
|
+
rs = cursor.fetchone()
|
|
98
|
+
print(rs)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# doris 异步测试,async_enable=True
|
|
102
|
+
async def async_doris_test():
|
|
103
|
+
async with options.doris.acquire() as conn:
|
|
104
|
+
async with conn.cursor() as cursor:
|
|
105
|
+
await cursor.execute("select 1")
|
|
106
|
+
rs = await cursor.fetchone()
|
|
107
|
+
print(rs)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
loop = asyncio.get_event_loop()
|
|
111
|
+
loop.run_until_complete(async_doris_test())
|
|
112
|
+
|
|
113
|
+
# ocean_base 同步测试,async_enable=False
|
|
114
|
+
with options.ocean_base.dedicated_connection() as conn:
|
|
115
|
+
conn.ping(reconnect=True)
|
|
116
|
+
with conn.cursor() as cursor:
|
|
117
|
+
cursor.execute("select 1")
|
|
118
|
+
description = cursor.description
|
|
119
|
+
rs = cursor.fetchone()
|
|
120
|
+
print(rs)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# ocean_base 异步测试,async_enable=True
|
|
124
|
+
async def async_ocean_base_test():
|
|
125
|
+
async with options.ocean_base.acquire() as conn:
|
|
126
|
+
async with conn.cursor() as cursor:
|
|
127
|
+
await cursor.execute("select 1")
|
|
128
|
+
rs = await cursor.fetchone()
|
|
129
|
+
print(rs)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
loop = asyncio.get_event_loop()
|
|
133
|
+
loop.run_until_complete(async_ocean_base_test())
|
|
134
|
+
|
|
135
|
+
# tidb 同步测试,async_enable=False
|
|
136
|
+
with options.tidb.dedicated_connection() as conn:
|
|
137
|
+
conn.ping(reconnect=True)
|
|
138
|
+
with conn.cursor() as cursor:
|
|
139
|
+
cursor.execute("select 1")
|
|
140
|
+
description = cursor.description
|
|
141
|
+
rs = cursor.fetchone()
|
|
142
|
+
print(rs)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# tidb 异步测试,async_enable=True
|
|
146
|
+
async def async_tidb_test():
|
|
147
|
+
async with options.tidb.acquire() as conn:
|
|
148
|
+
async with conn.cursor() as cursor:
|
|
149
|
+
await cursor.execute("select 1")
|
|
150
|
+
rs = await cursor.fetchone()
|
|
151
|
+
print(rs)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
loop = asyncio.get_event_loop()
|
|
155
|
+
loop.run_until_complete(async_tidb_test())
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
# sqlite3 异步测试
|
|
159
|
+
async def async_sqlite3_test():
|
|
160
|
+
cur = await options.sqlite3.cursor()
|
|
161
|
+
await cur.execute("SELECT 1")
|
|
162
|
+
row = await cur.fetchone()
|
|
163
|
+
print(row)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
loop = asyncio.get_event_loop()
|
|
167
|
+
loop.run_until_complete(async_sqlite3_test())
|
|
168
|
+
|
|
169
|
+
# sqlite3 同步测试
|
|
170
|
+
cursor = options.sqlite3.cursor()
|
|
171
|
+
cursor.execute('select 1')
|
|
172
|
+
row = cursor.fetchone()
|
|
173
|
+
print(row)
|
|
174
|
+
|
|
77
175
|
# es同步测试,async_enable=False
|
|
78
176
|
body = {
|
|
79
177
|
"query": {
|
|
@@ -103,6 +201,23 @@ async def async_es_test():
|
|
|
103
201
|
loop = asyncio.get_event_loop()
|
|
104
202
|
loop.run_until_complete(async_es_test())
|
|
105
203
|
|
|
204
|
+
# sql server同步测试
|
|
205
|
+
cursor = options.mssql.cursor()
|
|
206
|
+
cursor.execute('SELECT 1')
|
|
207
|
+
row = cursor.fetchone()
|
|
208
|
+
print(row)
|
|
209
|
+
|
|
210
|
+
# sql server暂不支持异步测试
|
|
211
|
+
|
|
212
|
+
# oracle 同步测试
|
|
213
|
+
cursor = options.oracle.cursor()
|
|
214
|
+
cursor.execute('select 1')
|
|
215
|
+
row = cursor.fetchone()
|
|
216
|
+
print(row)
|
|
217
|
+
|
|
218
|
+
# oracle暂不支持异步测试
|
|
219
|
+
|
|
220
|
+
|
|
106
221
|
# mongo同步测试,async_enable=False
|
|
107
222
|
print(options.mongo.test.test.find_one())
|
|
108
223
|
|
|
@@ -159,7 +274,7 @@ loop.run_until_complete(async_redis_test())
|
|
|
159
274
|
|
|
160
275
|
# sqlalchemy table
|
|
161
276
|
meta = MetaData()
|
|
162
|
-
t1 = Table("
|
|
277
|
+
t1 = Table("test_user", meta, Column("name", VARCHAR(collation='utf8mb3_bin', length=255)),
|
|
163
278
|
Column(name='id', comment=None, nullable=False, autoincrement=False, primary_key=True, type_=INTEGER(),
|
|
164
279
|
server_default=None))
|
|
165
280
|
|
|
@@ -183,25 +298,25 @@ loop.run_until_complete(async_sqlalchemy_test())
|
|
|
183
298
|
|
|
184
299
|
# neo4j同步测试
|
|
185
300
|
def query(tx):
|
|
186
|
-
nql = "MATCH (
|
|
301
|
+
nql = "MATCH (c:Company) return c limit 1"
|
|
187
302
|
for record in tx.run(nql):
|
|
188
303
|
print(record)
|
|
189
304
|
|
|
190
305
|
|
|
191
|
-
with options.neo4j.session(database="
|
|
306
|
+
with options.neo4j.session(database="invest") as session:
|
|
192
307
|
session.execute_read(query)
|
|
193
308
|
|
|
194
309
|
|
|
195
310
|
# neo4j异步测试
|
|
196
311
|
async def query(tx):
|
|
197
|
-
nql = "MATCH (
|
|
312
|
+
nql = "MATCH (c:Company) return c limit 1"
|
|
198
313
|
res = await tx.run(nql)
|
|
199
314
|
async for record in res:
|
|
200
315
|
print(record)
|
|
201
316
|
|
|
202
317
|
|
|
203
318
|
async def async_neo4j_test():
|
|
204
|
-
async with options.neo4j.session(database="
|
|
319
|
+
async with options.neo4j.session(database="invest") as session:
|
|
205
320
|
await session.execute_read(query)
|
|
206
321
|
|
|
207
322
|
|
|
@@ -227,4 +342,5 @@ async def async_clickhouse_test():
|
|
|
227
342
|
loop = asyncio.get_event_loop()
|
|
228
343
|
loop.run_until_complete(async_clickhouse_test())
|
|
229
344
|
|
|
345
|
+
|
|
230
346
|
```
|
|
@@ -42,6 +42,6 @@ twine check dist/*
|
|
|
42
42
|
twine upload dist/*
|
|
43
43
|
twine upload dist/* --repository-url https://pypi.chanyeos.com/ -u admin -p shangqi
|
|
44
44
|
# 安装最新的版本测试
|
|
45
|
-
pip install -U
|
|
46
|
-
pip install -U
|
|
45
|
+
pip install -U lesscode_database -i https://pypi.org/simple
|
|
46
|
+
pip install -U lesscode_database -i https://pypi.chanyeos.com/simple
|
|
47
47
|
"""
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{lesscode_database-0.0.3 → lesscode_database-0.0.4}/lesscode_database.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|